多表_SQL約束-外來鍵約束
阿新 • • 發佈:2022-04-17
外來鍵約束
主鍵:可以唯一標識一條記錄的列
外來鍵:從表中與主表的主鍵對應的欄位
主表:外來鍵所指向的表,約束其他表的表
從表:外來鍵所在的表,被約束的表
價值:建立主表與從表的關聯關係,為兩個表的資料建立連線,約束兩個表中資料的一致性和完整性
建立外來鍵約束
-
建立表時新增外來鍵約束:
CONSTRAINT [外來鍵約束的名稱] FOREIGN KEY (外來鍵欄位) REFERENCES [主表名稱(主鍵欄位)]
-
新增外來鍵約束:
ALTER TABLE [表名] ADD CONSTRAINT [外來鍵約束的名稱] FOREIGN KEY [外來鍵欄位] REFERENCES [主表名稱(主鍵欄位)]
alter table emp_part add constraint emp_dept foreign key(dept_id) references dept(id);
# 建立一個關聯到主表的從表
CREATE TABLE emp_part(
emp_id INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20),
age INT ,
gender VARCHAR(10),
dept_id INT,
-- 新增外來鍵約束
CONSTRAINT emp_dept FOREIGN KEY(dept_id) REFERENCES dept(id)
刪除外來鍵約束
- 語法:
ALTER TABLE [表名] DROP FOREIGN KEY [外來鍵約束名稱]
- 注意事項
- 從表外來鍵資料型別必須與主表的主鍵一致
- 刪除資料時,需先刪除從表資料再刪除主表的資料
- 新增資料時先新增主表資料,再新增從表資料
# 刪除外來鍵約束
ALTER TABLE emp_part DROP FOREIGN KEY emp_dept
# 插入一條非法資料
INSERT INTO emp_part VALUES(1,'cindy',20,'female','4')
SELECT * FROM emp_part
# 向主表中插入一條資料
INSERT INTO dept VALUES(2,'運營部','張三','北京')
# 向從表中插入一條資料
INSERT INTO emp_part VALUES(1,'cindy',20,'female','2')
# 刪除主表中的資料
DELETE FROM dept WHERE id=2
級聯刪除
- 刪除主表資料的同時,也刪除掉從表中相關的資料;即當你刪除一個部門資訊,就會把所關聯的該部門員工資訊刪除。
- ON DELETE CASCADE
alter table emp_part add constraint emp_dept foreign key(dept_id) references dept(id) on delete cascade;