MYSQL數據庫-約束
約束是一種限制,它通過對表的行或列的數據做出限制,來確保表的數據的完整性、唯一性。
MYSQL中,常用的幾種約束:
約束類型: | 主鍵 | 默認值 | 唯一 | 外鍵 | 非空 |
---|---|---|---|---|---|
關鍵字: | PRIMARY KEY | DEFAULT | UNIQUE | FOREIGN KEY |
NOT NULL |
===================================================
主鍵(PRIMARY KEY)是用於約束表中的一行,作為這一行的標識符,在一張表中通過主鍵就能準確定位到一行,因此主鍵十分重要。主鍵要求這一行的數據不能有重復且不能為空。
還有一種特殊的主鍵——復合主鍵。主鍵不僅可以是表中的一列,也可以由表中的兩列或多列來共同標識
===================================================
默認值約束(DEFAULT)規定,當有DEFAULT約束的列,插入數據為空時該怎麽辦。
DEFAULT約束只會在使用INSERT語句(上一實驗介紹過)時體現出來,INSERT語句中,如果被DEFAULT約束的位置沒有值,那麽這個位置將會被DEFAULT的值填充
===================================================
唯一約束(UNIQUE)比較簡單,它規定一張表中指定的一列的值必須不能有重復值,即這一列每個值都是唯一的。
當INSERT語句新插入的數據和已有數據重復的時候,如果有UNIQUE約束,則INSERT失敗.
===================================================
外鍵(FOREIGN KEY)既能確保數據完整性,也能表現表之間的關系。
一個表可以有多個外鍵,每個外鍵必須REFERENCES(參考)另一個表的主鍵,被外鍵約束的列,取值必須在它參考的列中有對應值。
在INSERT時,如果被外鍵約束的值沒有在參考列中有對應,比如以下命令,參考列(department表的dpt_name)中沒有dpt3,則INSERT失敗
===================================================
非空約束(NOT NULL),聽名字就能理解,被非空約束的列,在插入值時必須非空。
在MySQL中違反非空約束,不會報錯,只會有警告.
附: SQL語句
1 CREATE DATABASE mysql_shiyan; 2 3 use mysql_shiyan; 4 5 CREATE TABLE department 6 ( 7 dpt_name CHAR(20) NOT NULL, 8 people_num INT(10) DEFAULT ‘10‘, 9 CONSTRAINT dpt_pk PRIMARY KEY (dpt_name) 10 ); 11 12 CREATE TABLE employee 13 ( 14 id INT(10) PRIMARY KEY, 15 name CHAR(20), 16 age INT(10), 17 salary INT(10) NOT NULL, 18 phone INT(12) NOT NULL, 19 in_dpt CHAR(20) NOT NULL, 20 UNIQUE (phone), 21 CONSTRAINT emp_fk FOREIGN KEY (in_dpt) REFERENCES department(dpt_name) 22 ); 23 24 CREATE TABLE project 25 ( 26 proj_num INT(10) NOT NULL, 27 proj_name CHAR(20) NOT NULL, 28 start_date DATE NOT NULL, 29 end_date DATE DEFAULT ‘2015-04-01‘, 30 of_dpt CHAR(20), 31 CONSTRAINT proj_pk PRIMARY KEY (proj_num,proj_name) 32 );
MYSQL數據庫-約束