標籤:
約束是一種限制,它通過對錶的行或列的資料做出限制,來確保表的資料的完整性、唯一性。
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 employee13 (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 project25 (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) REFERENCES department(dpt_name),31 CONSTRAINT proj_pk PRIMARY KEY (proj_num,proj_name)32 );
MYSQL資料庫-約束