SQL教程——常見的約束型別
本教程中所使用的資料庫的建表語句都在“SQL教程——索引”這篇文章中,點選連結直達:索引&建表語句
摘要:本文主要介紹SQL的DDL語法
目錄
常見的約束型別
含義:一種限制,用於限制表中的資料,為了保證表中的資料的準確性和可靠性
分類:六大約束
-
not null:非空,用於保證該欄位的值不能為空
比如姓名,學號等
-
default:預設,用於保證該欄位的預設值
比如性別,成績
-
unique:唯一,用於儲存該欄位的值具有唯一性,可以為空
比如座位號
-
check:檢查約束【MySQL中不支援】
-
primary key:主鍵,用於保證該欄位的值具有唯一性,並且非空
比如學號,員工編號等
-
foreign key:外來鍵,用於限制兩個表的關係,用於保證該欄位的值必須來自於主表的關聯列的值
在從表中新增限制,用於引用主表中某列的值
新增約束的時機:
-
建立表時
-
修改表時
約束的新增分類:
-
列級約束:六大約束語法上都支援,但外來鍵約束沒有效果。
-
表級約束:除了非空、預設,其它都支援。
主鍵和唯一的大對比:
保證唯一性 是否允許為空 一個表中可以有多個 是否允許組合
主鍵 √ x 只有一個 √,但不推薦
唯一 √ √ 可以有多個 √,但不推薦
外來鍵:
-
要求在從表設定外來鍵關係
-
從表的外來鍵列的型別和主表的關聯列的型別要求一致或相容,名稱無要求。
-
主表的關聯列必須是一個key(一般是主鍵或是唯一)
-
插入資料時,先插入主表,再插入從表
刪除資料時,先刪除從表,再刪除主表
insert into major values(1, 'java');
insert into major values(2, 'h5');
create table 表名(
欄位名 欄位型別 列級約束,
欄位名 欄位型別,
表級約束
);
一、建立表時新增約束
1.新增列級約束
create table stunifo(
id int primary key, #主鍵
stuName varchar(20) not null, #非空
gender char(1) check(gender = '男' or gender = '女'), #檢查
seat int unique, #唯一
age int default 18, #預設約束
majorId int foreign key references major(id) #外來鍵
);
create table major(
id int primary key,
majorName varhcar(20)
);
#檢視stuinfo表中所有的索引,包括主鍵,外來鍵和唯一
show index from stuinfo;
2.新增表級約束
dop table if exists stuinfo;
create table stunifo(
id int,
stuName varchar(20),
gender char(1),
seat int,
age int ,
majorId int ,
constraint pk primary key(id),
constraint uq unique(seat),
constraint ck check(gender = '男' or gender = '女'),
constraint fk_stuinfo_major foreign key(majorid) references major(id)
);
通用寫法:
二、刪除表時刪除約束
1.刪除非空約束
alter table stuinfo modify column stuname varhcar(20) null;
2.刪除預設約束
alter table stuinfo modify column age int;
3.刪除主鍵
alter table stuinfo drop primary key;
4.刪除唯一
alter table stuinfo drop index seat;
5.刪除外來鍵
alter table stuinfo drop foreign key
show index from stuinfo
三、表示列
含義:可以不用手動插入值,系統提供的預設的序列值
特點:
-
標識列所在的列必須是一個key(primary key 或者 unique)
-
一張表至多有一個標識列
-
標識列的型別必須是數值型
-
標識列可以通過set auto_increment_increment = 3; 來設定步長
可以通過手動插入值來設定起始值
id int primary key auto_increment;
相關文章
- SQL教程——常見的資料型別SQL資料型別
- C# 泛型 引用型別約束 值型別約束C#泛型型別
- SQL 常見資料型別SQL資料型別
- 以太坊常見合約型別及其用途型別
- PHP7型別約束PHP型別
- 常見問題--表的約束initially immediate 理解
- PHP中的型別約束介紹PHP型別
- 【MySQL】MySQL基礎(SQL語句、約束、資料型別)MySql資料型別
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- 常見的型別命名型別
- SQL約束SQL
- 【SQL】使用sql更改表的列的資料型別和新增新列和約束SQL資料型別
- SQL中給varchar2(5)資料型別合適的約束SQL資料型別
- 常見MIME型別型別
- TreeSet的null值與元素型別的約束Null型別
- 常見的資料型別資料型別
- Oracle constraints type 約束型別OracleAI型別
- 泛型的約束理解泛型
- DDOS攻擊常見的型別型別
- DDOS常見的型別有哪些?型別
- ERP整合常見的型別型別
- sql: 查詢約束SQL
- Java泛型(三):型別擦除帶來的約束與侷限性Java泛型型別
- mysql常見資料型別MySql資料型別
- TypeScript 之常見型別(下)TypeScript型別
- TypeScript 之常見型別(上)TypeScript型別
- 32. 基本資料型別、約束條件資料型別
- 常見的網路攻擊型別型別
- 代理IP的常見型別與用途型別
- 常見的代理IP型別介紹型別
- 常見的錯誤日誌型別型別
- MySQL——表的約束,資料型別,增刪查改MySql資料型別
- 完整性約束的型別(Types of Integrity Constraints)型別AI
- Sqlserver中所有約束的型別,建立、修改與刪除SQLServer型別
- C#泛型約束C#泛型
- Go 泛型之泛型約束Go泛型
- SQL之延遲約束SQL
- 你知道是哪個是常見的約束中MySql不支援的嗎?MySql