1. 程式人生 > >MySQL數據庫操作(4)表約束

MySQL數據庫操作(4)表約束

weight 大於 creat nod 開始 引擎 bsp 數據類型 set

MySQL數據庫操作(4)表約束

在創建表或者插入列時,可以對列的值進行約束,當插入條目時如果不符合約束,將會報錯,拒絕插入。

非空約束
`NOT NULL` 字段值不能為空
例:

#創建表時添加非空約束
CREATE TABLE tb1( id INT, name VARCHAR(20) NOT NULL );
INSERT INTO tb1(id) VALUE(1); # 報錯,沒有傳入name
#註意:在mysql 裏面,‘‘ 不等於null
#修改表添加非空約束
ALTER TABLE tb1 MODIFY id INT NOT NULL;
#取消非空約束
ALTER TABLE tb1 MODIFY id INT
;

唯一約束
`UNIQUE KEY` 確保字段中的值的唯一
例:

#創建表時添加唯一約束
CREATE TABLE tb2(id INT NOT NULL UNIQUE KEY, name VARCHAR(20) NOT NULL);
INSERT INTO tb2 VALUE(1,張三);
INSERT INTO tb2 VALUE(1,李四); # 報錯,id字段的值有重復
#修改表添加唯一約束
ALTER TABLE `tb2` ADD UNIQUE KEY(`name`);
#刪除唯一約束
ALTER TABLE tb2 DROP KEY name;
#聯合唯一約束
ALTER
TABLE tb2 ADD aa INT, add bb INT; ALTER TABLE tb2 ADD UNIQUE KEY (aa,bb); INSERT INTO tb2 VALUE(4,佳能,1,2); INSERT INTO tb2 VALUE(5,哈哈,1,2); # 報錯,(aa,bb)聯合字段有重復 #刪除聯合唯一 SHOW CREATE TABLE tb2; #查看約束名 ALTER TABLE tb2 DROP KEY aa; #通過約束名刪除約束,聯合約束默認名為聯合列中的第一列

主鍵約束
`PRIMARY KEY ` == `NOT NULL + UNIQUE KEY`
主鍵保證記錄的唯一性, 唯一標識每一條數據
主鍵自動為`NOT NULL`
每張數據表只能存在一個主鍵
當一張表裏沒有一個主鍵的時候,第一個出現的非空且為唯一的列被視為有主鍵。
例:

#創建表時添加主鍵約束
CREATE TABLE tb3( id INT PRIMARY KEY,name VARCHAR(20) NOT NULL);
#刪除主鍵約束
ALTER TABLE tb3 DROP PRIMARY KEY;
#添加主鍵約束
ALTER TABLE tb3 ADD PRIMARY KEY(id);
#聯合主鍵
CREATE TABLE tb4(id_a INT , id_b INT, content VARCHAR(20), PRIMARY KEY(id_a,id_b) );
#添加聯合主鍵
ALTER TABLE tb4 ADD PRIMARY KEY(id_a,id_b);

自增長
`AUTO_INCREMENT `自動編號,一般與主鍵組合使用。一個表裏面只有一個自增
默認情況下,起始值為1,每次的增量為1。
當插入記錄時,如果為`AUTO_INCREMENT`數據列明確指定了一個數值,則會出現兩種情況,
情況一,如果插入的值與已有的編號重復,則會出現出錯信息,因為AUTO_INCREMENT數據列的值必須是唯一的;
情況二,如果插入的值大於已編號的值,則會把該插入到數據列中,並使在下一個編號將從這個新值開始遞增。也就是說,可以跳過一些編號。如果自增序列的最大值被刪除了,則在插入新記錄時,該值被重用。(可以調大,不可以縮小)
例:

#創建表時添加自增長
CREATE TABLE tb5( id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20))AUTO_INCREMENT =100; # 如果不寫,默認從1開始
#刪除自動增長
ALTER TABLE tb5 MODIFY id INT;
#修改表添加自動增長
ALTER TABLE tb5 MODIFY id INT AUTO_INCREMENT;

默認約束
`DEFAULT `初始值設置,插入記錄時,如果沒有明確為字段賦值,則自動賦予默認值。
例:

#創建表時添加默認約束
CREATE TABLE tb6(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20) NOT NULL,age INT NOT NULL DEFAULT 18);
#刪除默認約束
ALTER TABLE tb6 MODIFY age INT NOT NULL;
ALTER TABLE tb6 ALTER age DROP DEFAULT;
#添加默認約束
ALTER TABLE tb6 MODIFY age INT DEFAULT 20;
ALTER TABLE tb6 ALTER age SET DEFAULT 21;

外鍵約束
外鍵約束`FOREIGN KEY`,保持數據一致性,完整性實現一對一或一對多關系。
外鍵約束的要求:
數據表的存儲引擎只能為InnoDB
外鍵列和參照列數據類型一致
外鍵必須關聯到鍵上面去,一般情況是關聯到,另一張表的主鍵
例:

#創建表時添加外鍵約束
CREATE TABLE `a`( a_id INT PRIMARY KEY,a_name VARCHAR(20) NOT NULL);
CREATE TABLE `b`(b_id INT PRIMARY KEY,b_name VARCHAR(20) NOT NULL,fy_id INT NOT NULL,CONSTRAINT AB_id FOREIGN KEY(fy_id) REFERENCES `a`(a_id)); #AB_id是外鍵的別名,如果沒有別名則無法刪除該外鍵,fy_id是本表中要關聯的列,`a`(a_id)是關聯到a表的a_id列,fy_id的取值必須在a表中的a_id列中出現過才能用。
#刪除外鍵
ALTER TABLE `b` DROP FOREIGN KEY AB_id;
#增加外鍵
ALTER TABLE `b` add CONSTRAINT AB_id FOREIGN KEY(fy_id) REFERENCES `a`(a_id);

MySQL數據庫操作(4)表約束