基礎篇 - SQL 的約束

一、實驗簡介
約束是一種限制,它通過對表的行或列的數據做出限制,來確保表的數據的完整性、唯一性。

二、實驗內容
1、約束分類

約束類型 主鍵 默認值 唯一 外鍵 非空
關鍵字 PRIMARY KEY DEFAULT UNIQU FORENGIN KEY NOT NULL

2、建立含約束表

1.可以使用git命令將需要的數據文件下載到本地文件夾:
git clone http://git.shiyanlou.com/shiyanlou/SQL3

2.在MySQL控制臺中,加載sql數據文件
source /home/shiyanlou/Desktop/SQL3/MySQL-03-01.sql

3、主鍵

主鍵 (PRIMARY KEY)是用于約束表中的一行,作為這一行的標識符,在一張表中通過主鍵就能準確定位到一行,因此主鍵十分重要。
注意:行中的主鍵不能有重復且不能為空。

4、默認值約束

默認值約束 (DEFAULT) 規定,當有 DEFAULT 約束的列,插入數據為空時,將使用默認值。

注意:DEFAULT 約束只會在使用 INSERT 語句時體現出來,INSERT語句中,如果被 DEFAULT 約束的位置沒有值,那么這個位置將會被 DEFAULT 的值填充。

5、唯一約束

唯一約束 (UNIQUE) 比較簡單,它規定一張表中指定的一列的值必須不能有重復值,即這一列每個值都是唯一的。

注意:當 INSERT 語句新插入的數據和已有數據重復的時候,如果有 UNIQUE約束,則 INSERT 失敗

6、外鍵約束

外鍵 (FOREIGN KEY) 既能確保數據完整性,也能表現表之間的關系。
一個表可以有多個外鍵,每個外鍵必須 REFERENCES (參考) 另一個表的主鍵,被外鍵約束的列,取值必須在它參考的列中有對應值。

注意:在 INSERT 時,如果被外鍵約束的值沒有在參考列中有對應,則INSERT 失敗

7、非空約束

非空約束 (NOT NULL),聽名字就能理解,被非空約束的列,在插入值時必須非空。

注意:在MySQL中違反非空約束,不會報錯,只會警告,標記為0值

CREATE TABLE department
(
  dpt_name   CHAR(20) NOT NULL,              //非空約束
  people_num INT(10) DEFAULT '10',           //默認值約束
  CONSTRAINT dpt_pk PRIMARY KEY (dpt_name)   //主鍵約束
//CONSTRAINT 可自定義主鍵名 dpt_pk == dpt_name 均作為該表主鍵
);

CREATE TABLE employee
(
  id      INT(10) PRIMARY KEY,                     //主鍵約束 id 作為該表主鍵
  name    CHAR(20), 
  age     INT(10),
  salary  INT(10) NOT NULL,                        //非空約束
  phone   INT(12) NOT NULL,                        //非空約束
  in_dpt  CHAR(20) NOT NULL,                      //非空約束
  UNIQUE  (phone),                                //唯一值約束,phone值在該表中唯一
  CONSTRAINT emp_fk FOREIGN KEY (in_dpt) REFERENCES department(dpt_name)
//外鍵約束 in_dpt,并自定義外鍵名 emp_fk 參考department表 dpt_name 列 
//使用INSERT語句時,該表in_dpt列值必須在department表dpt_name中存在
);
 
CREATE TABLE project
(
  proj_num   INT(10) NOT NULL,
  proj_name  CHAR(20) NOT NULL,
  start_date DATE NOT NULL,
  end_date   DATE DEFAULT '2015-04-01', //默認約束
  of_dpt     CHAR(20) REFERENCES department(dpt_name), //外鍵約束
  CONSTRAINT proj_pk PRIMARY KEY (proj_num,proj_name)
   //復合主鍵約束(proj_num,proj_name),并自定義主鍵名proj_pk
 );
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容