首頁 > 軟體

MySQL六種約束的範例詳解

2023-02-24 06:03:10

什麼是約束

作用於表上的規則,限制儲存在表中的資料

約束分類:

約束描述關鍵字
非空約束該欄位資料不能為nullNOT NULL
唯一約束該欄位資料唯一不重複UNIQUE
主鍵約束一行資料的唯一標識(非空且唯一)PRIMARY KEY
預設約束未指定該欄位值則使用預設值DEFAULT
檢查約束(8.0.16以後)該欄位值滿足某一條件CHECK
外來鍵約束為兩張表建立連線(資料一致、完整)FOREIGN KEY

建立表範例:

CREATE TABLE info(
	`id` INT UNIQUE auto_increment PRIMARY KEY COMMENT'ID唯一標識',
	`name` VARCHAR(10) NOT NULL UNIQUE COMMENT'姓名',
	`age` INT CHECK(age > 0 && age < 120) COMMENT '年齡',
	`status` CHAR(1) DEFAULT'1' COMMENT'狀態',
	`gender` CHAR(1) COMMENT'性別'
)COMMENT '使用者資訊表';

外來鍵約束

外來鍵通常用來為兩張表建立連線,兩張利用外來鍵連線的表被稱為父子表。

子表當中會設定一個外來鍵欄位用於關聯父表的主鍵欄位

即擁有外來鍵的表是子表(從表),該外來鍵對應另一個表的主鍵這個表稱之為父表

如果沒有設定外來鍵,僅僅是將子表開了一個欄位對應上了父表的主鍵欄位在mysql層面是依舊沒有任何關係的。此時兩個表僅存在邏輯關係,無法保證資料的完整性和一致性

建立外來鍵語法:

-- 在建立表時建立
CREATE TABLE son(
	...
	CONSTRAINT [外來鍵名稱] FOREIGN KEY(外來鍵欄位名) REFERENCES 主表名(主表主鍵欄位名)
);
-- 建立表後為表新增主鍵
ALTER TABLE 表名	ADD CONSTRAINT 外來鍵名稱 FOREIGN KEY(外來鍵欄位名) REFERENCES 主表(主表主鍵欄位名)
-- 刪除外來鍵
alter table 表名 drop foreign key 外來鍵名稱;

建立範例:

# 父表
CREATE TABLE father(
	`id` INT auto_increment PRIMARY KEY COMMENT'父表ID',
	`name` VARCHAR(20) NOT NULL COMMENT'姓名',
	`password` VARCHAR(20) DEFAULT(0000)
);
INSERT INTO father VALUES(null,'小三','1234'),(null,'小四','1234'),(null,'小五','1234'),(null,'小六','1234');
# 子表
CREATE TABLE son(
	`id` INT auto_increment PRIMARY KEY COMMENT'子表ID',
	`status` varchar(10) COMMENT '狀態',
	`fa_id` INT COMMENT'外來鍵',
	CONSTRAINT fk_father_son FOREIGN KEY(fa_id) REFERENCES father(id)
);
INSERT INTO son VALUES(null,'活',2),(null,'活',3),(null,'死',3),(null,'活',2);

上述範例 子表設定了外來鍵,欄位名為fa_id並關聯到了父表主鍵id,外來鍵名稱為fk_father_son

建立完成後,我們新增幾組資料。將幾個son新增到表中,並設定外來鍵欄位屬性為某個father。比如(null,‘活’,3),那麼此時如果我們嘗試去刪除父表id=3的這一行資料,就會提示錯誤。因為兩個表已經在mysql層面上進行了關聯

總結:

  • 從表的外來鍵通常是主表的主鍵
  • 從表中外來鍵的型別必須與主表中的主鍵型別一致
  • 主表資料發生變化時應注意從表資料的一致性問題

到此這篇關於MySQL六種約束的範例詳解的文章就介紹到這了,更多相關MySQL六種約束內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com