九、MySQL常见约束相关知识总结 学习笔记 + 强化复习(六大约束)
常見約束:
一、含義:一種限制,用于限制表中的數(shù)據(jù),為了保證表中的數(shù)據(jù)的準(zhǔn)確和可靠性
二、分類:六大約束
1、NOT NULL:非空,用于保證該字段的值不能為空
比如姓名、學(xué)號等
2、DEFAULT:默認(rèn),用于保證該字段有默認(rèn)值
比如性別
3、PRIMARY KEY:主鍵,用于保證該字段的值具有唯一性,并且非空
比如學(xué)號、員工編號等
4、UNIQUE:唯一,用于保證該字段的值具有唯一性,可以為空
比如座位號
5、CHECK:檢查約束【mysql中不支持】
比如年齡、性別
6、FOREIGN KEY:外鍵,用于限制兩個表的關(guān)系,用于保證該字段的值必須來自于主表的關(guān)聯(lián)列的值
注意:在從表添加外鍵約束,用于引用主表中某列的值
比如學(xué)生表的專業(yè)編號,員工表的部門編號,員工表的工種編號
三、添加約束的時機(jī):
1.創(chuàng)建表時
2.修改表時
四、約束的添加分類:
1)列級約束:
六大約束語法上都支持,但外鍵約束沒有效果
2)表級約束:
除了非空、默認(rèn),其他的都支持
主鍵和唯一的大對比:
| 主鍵 | √ | × | 至多有1個 | √,但不推薦 |
| 唯一 | √ | √ | 可以有多個 | √,但不推薦 |
外鍵:
1、要求在從表設(shè)置外鍵關(guān)系
2、從表的外鍵列的類型和主表的關(guān)聯(lián)列的類型要求一致或兼容,名稱無要求
3、主表的關(guān)聯(lián)列必須是一個key(一般是主鍵或唯一)
4、插入數(shù)據(jù)時,先插入主表,再插入從表
刪除數(shù)據(jù)時,先刪除從表,再刪除主表
一、創(chuàng)建表時添加約束
1.添加列級約束
語法:
直接在字段名和類型后面追加 約束類型即可。
只支持:默認(rèn)、非空、主鍵、唯一
USE students; DROP TABLE stuinfo; CREATE TABLE stuinfo(id INT PRIMARY KEY,#主鍵stuName VARCHAR(20) NOT NULL UNIQUE,#非空gender CHAR(1) CHECK(gender='男' OR gender ='女'),#檢查seat INT UNIQUE,#唯一age INT DEFAULT 18,#默認(rèn)約束majorId INT REFERENCES major(id)#外鍵);CREATE TABLE major(id INT PRIMARY KEY,majorName VARCHAR(20) );#查看stuinfo中的所有索引,包括主鍵、外鍵、唯一 SHOW INDEX FROM stuinfo;2.添加表級約束
語法:在各個字段的最下面
【constraint 約束名】 約束類型(字段名)
二、修改表時添加約束
1、添加列級約束
alter table 表名 modify column 字段名 字段類型 新約束;
2、添加表級約束
alter table 表名 add 【constraint 約束名】 約束類型(字段名) 【外鍵的引用】;
三、修改表時刪除約束
1.刪除非空約束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
2.刪除默認(rèn)約束
ALTER TABLE stuinfo MODIFY COLUMN age INT ;
3.刪除主鍵
ALTER TABLE stuinfo DROP PRIMARY KEY;
4.刪除唯一
ALTER TABLE stuinfo DROP INDEX seat;
5.刪除外鍵
ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;
SHOW INDEX FROM stuinfo;
【強(qiáng)化練習(xí)】
#1.向表emp2的id列中添加PRIMARY KEY約束(my_emp_id_pk) CREATE TABLE emp2(id INT ); DESC emp2;# 列級約束 ALTER TABLE emp2 MODIFY COLUMN id INT PRIMARY KEY; # 表級約束 ALTER TABLE emp2 ADD CONSTRAINT my_emp_id_pk PRIMARY KEY(id); SHOW INDEX FROM emp2;#2. 向表dept2的id列中添加PRIMARY KEY約束(my_dept_id_pk) CREATE TABLE dept2(id INT ); DESC emp2; # 表級約束 ALTER TABLE dept2 ADD CONSTRAINT my_dept_id_pk PRIMARY KEY(id); SHOW INDEX FROM dept2;#3. 向表emp2中添加列dept_id,并在其中定義FOREIGN KEY約束,與之相關(guān)聯(lián)的列是dept2表中的id列。 ALTER TABLE emp2 ADD COLUMN dept_id INT; ALTER TABLE emp2 ADD CONSTRAINT fk_emp2_dept2 FOREIGN KEY(dept_id) REFERENCES dept2(id);總結(jié):
| 列級約束 | 列的后面 | 語法都支持,但外鍵沒有效果 | 不可以 |
| 表級約束 | 所有列的下面 | 默認(rèn)和非空不支持,其他支持 | 可以(主鍵沒有效果) |
總結(jié)
以上是生活随笔為你收集整理的九、MySQL常见约束相关知识总结 学习笔记 + 强化复习(六大约束)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web框架——Flask系列之Jinja
- 下一篇: python脚本加密_教你如何基于pyt