02 011 MySQL 基礎 約束

2021-10-01 13:33:03 字數 3729 閱讀 9451

一種限制,限制表中資料,保證資料一致性。

1.非空約束not null保證欄位不為空;

2.預設約束default保證欄位有預設值;

3.主鍵約束primary key保證字段具有唯一性並且非空;

4.唯一約束unique保證字段唯一可以為空;

5.檢查約束check【mysql不支援】用來加判斷條件;

6.外來鍵約束foreign key用於限制兩個表的關係,用於保證該字段的值必須來自於主表關聯列的值;(在從表新增外來鍵約束,用於引用主表中某列的值)

新增約束的時機:

1.建立表時;2.修改表時;

約束的新增分類:

列級約束:語法都支援,但外來鍵約束沒有效果;

標記約束;除了非空、預設,其他都支援;

可以同時新增多個約束

1.新增列級約束(支援主鍵、非空、unique、default)

create table stuinfo(

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 varchar(20)

);

顯示索引,主鍵,外來鍵,唯一自動生成索引

show index from stuinfo;

2.新增表級約束

drop table if exists stuinfo ;

create table stuinfo(

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 ,

constraint pk primary key(id),

constraint uq unique(seat),

constraint ck check(),

constraint fk_stuinfo_major foreign key(majorid) references major(id)

);

主鍵索引預設primary(mysql中不會改變)

【constraint 約束名】可以省略,省略後預設索引為欄位名

約束名不可以重複

通用寫法:

create table stuinfo(

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 ,

constraint fk_stuinfo_major foreign key(majorid) references major(id)

);

保證唯一性

是否允許為空

乙個表中有幾個

是否允許組合主鍵是

否乙個是唯一

是是(但只有乙個)多個是

1.要求從表設定主鍵;

2.從表的外來鍵列的型別和主表的關聯列的型別一致或者相容,名稱無要求;

3.主表的關聯列必須是乙個key(一般主鍵或唯一);

4.插入資料時,先插主表,再插從表,刪除資料時,先刪除從表,再刪除主表;

刪除方式一:級聯刪除

alter table stuinfo add constraint fk_stuinfo_major foreign key(majorid) references major(id) on delete cascade;

delete from major where id = 3;#從表外來鍵為3的資料也刪除

方式二:級聯置空

alter table stuinfo add constraint fk_stuinfo_major foreign key(majorid) references major(id) on delete set null;

delete from major where id = 3;#從表外來鍵資料置空

alter table stuinfo modify column stuname varchar(20) not null;

alter table stuinfo modify column age int default 18;

alter table stuinfo modify column id int primary key;

alter table stuinfo modify add primary key(id);(表級);

alter table stuinfo modify column seat int unique;

alter table stuinfo add unique(seat);

alter table stuinfo add constraint fk_stuinfo_major foreign key(majorid) references major(id);(表級)

1.新增列級約束

alter table 表名 modify column 欄位名 字段型別 新約束;

2.新增表級約束

alter table 表名 add【constraint 約束名】 約束名(欄位名) 【外來鍵的引用】;

1.刪除非空約束

alter table stuinfo modify column stuname varchar(20) null;

2.刪除預設約束

alter table stuinfo modify column age int;

3.刪除主鍵

①alter table stuinfo modify column id int;

②alter table stuinfo drop primary key;

4.刪除唯一

alter table stuinfo drop index seat;

5.刪除外來鍵約束

alter table stuinfo drop foreign key fk_stuinfo_major;

位置支援約束型別

是否可以起約束名

列級約束

跟在列的後面

語法都支援,外來鍵沒有效果

否表級約束

所有列的下面

預設和非空不支援,其他支援

是(主鍵沒有效果)

學習整理於mysql 基礎+高階篇.

mysql基礎,約束

約束 概念 對錶中的資料進行限定,保證資料的正確性 有效性和完整性。分類 1.主鍵約束 primary key 2.非空約束 not null 3.唯一約束 unique 4.外來鍵約束 foreign key 非空約束 再建立表的時候新增約束 建立表之後在新增約束 5.自動增長 1.概念 如果某一...

MySQL基礎 04 約束

1.約束的概念和分類 約束的分類 約束 說明primary key 主鍵約束 primary key auto increment 主鍵 自動增長 unique 唯一約束 not null 非空約束 foreign key 外來鍵約束 foreign key on update cascade 外來...

MYSQL基礎四 約束

約束 1.約束資料的完整性和一致性 2.約束分為表級約束 單個表 和列級約束 多表之間的約束 3.約束的型別 not null 非空約束 default 預設約束 primary key 主鍵約束 unique key 唯一約束 foreign key 外來鍵約束 4.自動編號,必須與主鍵組合使用。...