1. 程式人生 > 其它 >多表_SQL約束-外來鍵約束

多表_SQL約束-外來鍵約束

外來鍵約束

 

主鍵:可以唯一標識一條記錄的列

外來鍵:從表中與主表的主鍵對應的欄位

主表:外來鍵所指向的表,約束其他表的表

從表:外來鍵所在的表,被約束的表

價值:建立主表與從表的關聯關係,為兩個表的資料建立連線,約束兩個表中資料的一致性和完整性

 

 

建立外來鍵約束

  • 建立表時新增外來鍵約束: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;