MySQL數據庫操作(4)表約束
阿新 • • 發佈:2018-01-24
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; #聯合唯一約束 ALTERTABLE 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)表約束