一分鐘瞭解CONSTRAINT約束的用法
阿新 • • 發佈:2018-11-21
場景
設計資料庫表,用來儲存學生和班級資訊表
第一種情況:
將學生資訊和班級資訊儲存到一張表中
sno sname classno cname
1 周杰倫 001 高三1班
2 林俊杰 002 高三1班
3 詹姆斯 003 高三2班
這種情況會造成資料冗餘問題,比如cname
欄位的資料重複太多,這時候稍微有經驗點的就會講學生資訊和班級資訊分開成兩張表進行儲存。
第二種情況:
學生表(新增單一外來鍵)
sno( pk) sname classno(fk)
1 周杰倫 001
2 林俊杰 002
3 詹姆斯 003
班級表
cno(pk) cname
100 高三1班
200 高三2班
為了保證學生表中的classno欄位中的資料必須來自於班級表中的cno欄位中的資料,有必要給學生表中的classno欄位新增外來鍵約束
mysql> drop table if exists t_student; mysql> drop table if exists t_class; mysql> create table t_class( -> cno int(10) primary key, -> cname varchar(128) not null unique -> ); mysql> create table t_student( -> sno int(10) primary key auto_increment, -> sname varchar(32) not null, -> classno int(3), -> foreign key(classno) references t_class(cno) -> );
外來鍵CONSTRAINT的注意點:
- 外來鍵值可以為NULL
- 外來鍵欄位去引用一張表的某個欄位的時候,被引用的欄位必須有unique約束
- 使用外來鍵後,兩張表分為父子表:班級表(父表),學生表(子表)
- 建立先建立父表
- 刪除先刪除子表資料
- 插入先插入父表資料
例子:
# 父表中的deptId,為被引用的欄位 CREATE TABLE employ(id INT PRIMARY KEY,ename VARCHAR(20),deptId INT); # 子表使用CONSTRAINT 進行對父表deptId的引用 CREATE TABLE employ(id INT PRIMARY KEY,ename VARCHAR(20),deptId INT, CONSTRAINT employ_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id));
CREATE TABLE employ(id INT PRIMARY KEY,ename VARCHAR(20),deptId INT, CONSTRAINT employ_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id));
個人網站:http://xudailong.cc
關注「蛇崽網盤教程資源」公眾號 ,在微信後臺回覆「領取資源」,獲取IT資源200G乾貨大全。
更多資源請訪問:
https://blog.csdn.net/xudailong_blog/article/details/78762262
某課視訊教程
https://xudailong.cc/2018/09/30/muke-courses/
關注「蛇崽網盤教程資源」公眾號 ,在微信後臺回覆「領取資源」,獲取IT資源200G乾貨大全。
在微信後臺回覆「130個小程式」,即可免費領取享有匯入就能跑的微信小程式