標籤:拒絕 rem 建立 uniq 建表 mys nbsp 報錯 完整
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)資料表條件約束