MySQL六種約束的示例詳解
什么是約束
作用于表上的規(guī)則,限制存儲在表中的數(shù)據(jù)
約束分類:
| 約束 | 描述 | 關(guān)鍵字 |
|---|---|---|
| 非空約束 | 該字段數(shù)據(jù)不能為null | NOT NULL |
| 唯一約束 | 該字段數(shù)據(jù)唯一不重復(fù) | UNIQUE |
| 主鍵約束 | 一行數(shù)據(jù)的唯一標(biāo)識(非空且唯一) | PRIMARY KEY |
| 默認(rèn)約束 | 未指定該字段值則使用默認(rèn)值 | DEFAULT |
| 檢查約束(8.0.16以后) | 該字段值滿足某一條件 | CHECK |
| 外鍵約束 | 為兩張表建立連接(數(shù)據(jù)一致、完整) | FOREIGN KEY |
創(chuàng)建表示例:
CREATE TABLE info( `id` INT UNIQUE auto_increment PRIMARY KEY COMMENT'ID唯一標(biāo)識', `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 '用戶信息表';
外鍵約束
外鍵通常用來為兩張表建立連接,兩張利用外鍵連接的表被稱為父子表。
子表當(dāng)中會設(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,‘活’,3),那么此時如果我們嘗試去刪除父表id=3的這一行數(shù)據(jù),就會提示錯誤。因為兩個表已經(jīng)在mysql層面上進行了關(guān)聯(lián)
總結(jié):
- 從表的外鍵通常是主表的主鍵
- 從表中外鍵的類型必須與主表中的主鍵類型一致
- 主表數(shù)據(jù)發(fā)生變化時應(yīng)注意從表數(shù)據(jù)的一致性問題
到此這篇關(guān)于MySQL六種約束的示例詳解的文章就介紹到這了,更多相關(guān)MySQL六種約束內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL數(shù)據(jù)庫char與varchar的區(qū)別分析及使用建議
本文主要介紹了mysql中VARCHAR與CHAR字符型數(shù)據(jù)的差異以及這兩種字符型數(shù)據(jù)在項目中的使用建議,真心不錯。值得一看。小編有種受益匪淺的感覺。2014-09-09
linux 安裝 mysql 8.0.19 詳細(xì)步驟及問題解決方法
這篇文章主要介紹了linux 安裝 mysql 8.0.19 詳細(xì)步驟,本文給大家列出了常見問題及解決方法,通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02
mysql 日期和時間格式轉(zhuǎn)換實現(xiàn)語句
對于每個類型擁有的值范圍以及并且指定日期何時間值的有效格式的描述見7.3.6 日期和時間類型。2009-10-10
mysql如何創(chuàng)建數(shù)據(jù)庫并指定字符集
這篇文章主要介紹了mysql如何創(chuàng)建數(shù)據(jù)庫并指定字符集問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12
MySql官方手冊學(xué)習(xí)筆記1 MySql簡單上手
這是我學(xué)習(xí)MySql 5.1時做的一些整理與筆記,希望能理一理自己學(xué)到的東西,如果能有助于各位同道學(xué)習(xí)MySql那就更是意外之喜了,呵呵2012-10-10

