MySQL - 列的完整性約束
完整性約束條件是對欄位進行限制,要求使用者對該屬性進行的操作符合特定的要求。如果不滿足完整性約束條件,資料庫系統將不再執行使用者的操作。MySQL中基本的完整性約束條件如下表所示。下表是完整性約束條件:
1.設定表字段的主鍵約束(PRIMARY KEY,PK)
主鍵是表的一個特殊欄位,能唯一標識該表中的每條資訊。主鍵和記錄的關係,如同身份證和人的關係。主鍵用來標識每個記錄,每個記錄的主鍵值都不同。身份證用來表明人的身份,每個人都具有唯一的身份證號。設定表的主鍵是指在建立表時設定表的某個欄位為該表的主鍵。
主鍵的主要目的是幫助資料庫管理系統以最快的速度查詢到表的某一條資訊。主鍵必須滿足的條件就是主鍵必須是唯一的,表中任意兩條記錄的主鍵欄位的值不能相同,並且是非空值。主鍵可以是單一的欄位,也可以是多個欄位的組合。
1.1單欄位主鍵
單欄位主鍵的語法規則如下:
CREATE TABLE tablename(propName propType PRIMARY KEY, ......); 或 CREATE TABLE tablename(propName propType, ...... ,PRIMARY KEY(propName));
建立表school,設定id欄位為PK約束,再檢視class表資訊,SQL語句如下
1 mysql> create database school; #建立資料庫school 2 mysql> use school; #選擇資料庫school3 mysql> create table class(id int PRIMARY KEY, name varchar(128), teacher varchar(64)); #建立表class 4 mysql> desc class; #查詢表class 的定義, describe class 效果等同 5 mysql> show create table class; #同樣可以實現查詢表class 的定義 6 mysql> insert into class VALUES(1,'測試文字一','test1'); #插入成功 7 mysql> insert into class VALUES(1,'測試文字二','test2'); #因主鍵約束,插入失敗
Mysql 支援給主鍵設定名字:
1 create table tablename(propName propType , ...... CONSTRAINT pk_name PRIMARY KEY(propName));
給id欄位的PK約束設定一個名字,可以執行SQL語句CONSTRAINT。如下
1 mysql> create database school; #建立資料庫school 2 mysql> use school; #選擇資料庫school 3 mysql> create table class(id int , name varchar(128), teacher varchar(64), CONSTRAINT id_pk PRIMARY KEY (id)); #建立表class 4 mysql> desc class ; #查詢表class 的定義, describe class 效果等同 5 mysql> show create table class ; #同樣可以實現查詢表class 的定義 6 mysql> insert into class VALUES(1,'測試文字一','test1'); #插入成功 7 mysql> insert into class VALUES(1,'測試文字二','test2'); #因主鍵約束,插入失敗
1.2 多欄位主鍵
主鍵是由多個屬性組合而成時,在屬性定義完之後統一設定主鍵。語法規則如下:
1 CREATE TABLE tablename 2 ( 3 propName1 propType , 4 propName2 propType , 5 ...... 6 [CONSTRAINT pk_name]PRIMARY KEY(propName1, propName2) 7 );
如下:
1 mysql> create database school; #建立資料庫school 2 mysql> use school; #選擇資料庫school 3 mysql> create table class3(id int, name varchar(128), teacher varchar(64), CONSTRAINT id_pk PRIMARY KEY(id,name)); #建立表class3,設定聯合主鍵 4 mysql> desc class3; #查詢表class3 的定義, describe class3 效果等同 5 mysql> insert into class VALUES(1,'測試文字','test1'); #插入成功 6 mysql> insert into class VALUES(1,'測試文字','test2'); #因聯合主鍵約束,插入失敗
2.設定表字段的外來鍵約束(FOREIGN KEY,FK)
外來鍵是表的一個特殊欄位,外來鍵約束是為了保證多個表(通常為兩個表)之間的參照完整性,即構建兩個表的欄位之間的參照關係。
設定外來鍵約束的兩個表之間具有父子關係,即子表中某個欄位的取值範圍由父表決定。例如,表示一個班級和學生關係,即每個班級有多個學生。首先應該有兩個表:班級表和學生表,然後學生表有一個表示班級編號的欄位no,其依賴於班級表的主鍵,這樣欄位no就是學生表的外來鍵,通過該欄位班級表和學生表建立了關係。
挖坑
====================