1. 程式人生 > >MYSQL數據庫-約束

MYSQL數據庫-約束

insert name ces 一個 默認 完整性 l數據庫 理解 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數據庫-約束