更新時間:2021-01-18 17:50:01 來源:動力節點 瀏覽1139次
約束就是對表中的數據進行限定,保證數據的正確性、有效性和完整性。在MySQL數據庫中,有比較重要的4種約束,共同維護著MySQL數據庫的數據。本文我們就來一探究竟,學習MySQL數據庫中4大約束。
MySQL中4大約束具體如下:
1. 主鍵約束:primary key
2. 非空約束:not null
3. 唯一約束:unique
4. 外鍵約束:foreign key
下面我們來一一講解MySQL數據庫中4大約束:
1.主鍵約束(PRIMARY KEY)
主鍵約束列不允許重復,即任意兩行的主鍵值都不相同;每行都具有一個主鍵值,也不允許出現空值;
單列主鍵創建有兩種方式:
一種是直接對字段加primary key關鍵字:
CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(20),
)
另外一種是通過額外加約束的方式:
CREATE TABLE student(
id INT NOT NULL,
name VARCHAR(20),
CONSTRAINT PK_STUD_ID PRIMARY KEY(id)
//PK_STUD_ID為約束的名字
)
有時候一個列的字段可能有重復,可以聯合多個列設為主鍵。
聯合主鍵的語句:
CREATE TABLE student(
name VARCHAR(20),
class VARCHAR(20),
CONSTRAINT PK_STUD_ID PRIMARY KEY(name,class)
)
其它操作
//刪除主鍵約束
ALTER TABLE 表名 DROP PRIMARY KEY;
//添加主鍵
ALTER TABLE 表名 ADD PRIMARY KEY(列名);
//修改列為主鍵
ALTER TABLE 表名 MODIFY 列名 數據類型 PRIMARY KEY;
2.外鍵約束(FOREIGN KEY)
外鍵約束是保證一個或兩個表之間的參照完整性,保持數據一致性。表的外鍵可以是另一表的主鍵(也可以是唯一索引,詳情看這里), 外鍵可以有重復的, 可以是空值。實現一對一或一對多關系。
創建外鍵約束
CREATE TABLE classes(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20)
);
//第一種:添加關鍵字
CREATE TABLE student(
id INT AUTO_INCREMENT,
name VARCHAR(20),
CONSTRAINT PK_ID PRIMARY KEY(id),
class_id INT REFERENCES classes(id)
)
//第二種:額外聲明
CREATE TABLE student(
id INT AUTO_INCREMENT,
name VARCHAR(20),
CONSTRAINT PK_ID PRIMARY KEY(id),
class_id INT,
CONSTRAINT fk_class_id FOREIGN KEY(classe_id) REFERENCES classes(id)
)
外鍵約束的要求:
父表和子表必須使用相同的存儲引擎,而且禁止使用臨時表,數據表的存儲引擎只能為InnoDB,default-storage-engine-INNODB外鍵列和參照列必須具有相似的數據類型,數字的長度或是有符號位必須相同,而字符 的長度可以不同外鍵列和參照列必須創建索引,如果外鍵列不存在索引的話,MySQL將自動創建索引。設定參照列:FOREIGN KEY(id) PEFERENCES provinces(id)
外鍵約束的參照操作:
CASCADE:從父表刪除或更新且自動刪除或更新子表中匹配的行
SET NULL:從父表刪除或更新行,并設置子表中的外鍵列為NULL,如果使用該選項,必須保證子表列沒有指定NOT NULL
RESTRICT:拒絕對父表的刪除或更新操作
NO ACTION:標準SQL的關鍵字,在MySQL中與RESTRICT相同
其它操作
//刪除外鍵約束
ALTER TABLE 表名 DROP FOREIGN KEY 外鍵約束名;
(創建外鍵的方法沒有指定約束名稱,系統會默認給外鍵約束分配外鍵約束名稱,命名為student_ibfk_n)
//增加外鍵約束
ALTER TABLE 表名 ADD FOREIGN KEY 列名 REFERENCES 父表(對應列名);
3.唯一約束(UNIQUE)
指定表中某一列或多個列不能有相同的兩行或者兩行以上的數據存在,
唯一約束可以保證記錄的唯一性
唯一約束的字段可以為空值(允許的空值有多個,但是最終存儲的只有一個)
每張數據表可以存在多個唯一約束
UNIQUE KEY的用途:主要是用來防止數據插入的時候重復。
CREATE TABLE student
(
name CHAR(20) UNIQUE KEY
);
為表中列添加UNIQUE KEY
ALTER TABLE student MODIFY CHAR(20) UNIQUE KEY;
4.非空約束(NOT NULL)
輸入值必須是非空的,需要注意的是允許控制盡量不要太多,太多會更消耗數據庫性能。
CREATE TABLE student
(
name CHAR(20) NOT NULL
);
以上就是MySQL數據庫中4大約束,除此之外,其實MySQL中還存在著默認約束等其他約束,但總體而言,掌握主鍵約束、非空約束、唯一約束、外鍵約束這4種約束的使用,在MySQL數據庫中對數據的約束是綽綽有余的。當然,想要精益求精的小伙伴也可以觀看本站的MySQL教程,學習更多的MySQL的相關知識,讓自己的知識更上一層樓!
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習