溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL六種約束是什么

發(fā)布時間:2023-02-24 15:01:08 來源:億速云 閱讀:219 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細介紹“MySQL六種約束是什么”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“MySQL六種約束是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

什么是約束

作用于表上的規(guī)則,限制存儲在表中的數(shù)據(jù)

約束分類:

約束描述關(guān)鍵字
非空約束該字段數(shù)據(jù)不能為nullNOT NULL
唯一約束該字段數(shù)據(jù)唯一不重復(fù)UNIQUE
主鍵約束一行數(shù)據(jù)的唯一標識(非空且唯一)PRIMARY KEY
默認約束未指定該字段值則使用默認值DEFAULT
檢查約束(8.0.16以后)該字段值滿足某一條件CHECK
外鍵約束為兩張表建立連接(數(shù)據(jù)一致、完整)FOREIGN KEY

創(chuàng)建表示例:

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'狀態(tài)',
	`gender` CHAR(1) COMMENT'性別'
)COMMENT '用戶信息表';

外鍵約束

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

子表當中會設(shè)定一個外鍵字段用于關(guān)聯(lián)父表的主鍵字段

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

如果沒有設(shè)置外鍵,僅僅是將子表開了一個字段對應(yīng)上了父表的主鍵字段在mysql層面是依舊沒有任何關(guān)系的。此時兩個表僅存在邏輯關(guān)系,無法保證數(shù)據(jù)的完整性和一致性

創(chuàng)建外鍵語法:

-- 在創(chuàng)建表時創(chuàng)建
CREATE TABLE son(
	...
	CONSTRAINT [外鍵名稱] FOREIGN KEY(外鍵字段名) REFERENCES 主表名(主表主鍵字段名)
);
-- 創(chuàng)建表后為表添加主鍵
ALTER TABLE 表名	ADD CONSTRAINT 外鍵名稱 FOREIGN KEY(外鍵字段名) REFERENCES 主表(主表主鍵字段名)
-- 刪除外鍵
alter table 表名 drop foreign key 外鍵名稱;

創(chuàng)建示例:

# 父表
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 '狀態(tài)',
	`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);

上述示例 子表設(shè)置了外鍵,字段名為fa_id并關(guān)聯(lián)到了父表主鍵id,外鍵名稱為fk_father_son

創(chuàng)建完成后,我們添加幾組數(shù)據(jù)。將幾個son添加到表中,并設(shè)置外鍵字段屬性為某個father。比如(null,&lsquo;活&rsquo;,3),那么此時如果我們嘗試去刪除父表id=3的這一行數(shù)據(jù),就會提示錯誤。因為兩個表已經(jīng)在mysql層面上進行了關(guān)聯(lián)

總結(jié):

  • 從表的外鍵通常是主表的主鍵

  • 從表中外鍵的類型必須與主表中的主鍵類型一致

  • 主表數(shù)據(jù)發(fā)生變化時應(yīng)注意從表數(shù)據(jù)的一致性問題

讀到這里,這篇“MySQL六種約束是什么”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI