请注意,"Orders" 表中的 "P_Id" 列指向 "Persons" 表中的 "P_Id" 列。
"Persons" 表中的 "P_Id" 列是 "Persons" 表中的 PRIMARY KEY。
"Orders" 表中的 "P_Id" 列是 "Orders" 表中的 FOREIGN KEY。
FOREIGN KEY 约束用于预防破坏表之间连接的行为。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
下面的 SQL 在 "Orders" 表创建时在 "P_Id" 列上创建 FOREIGN KEY 约束:
MySQL:
CREATE TABLE OrdersSQL Server / Oracle / MS Access:
CREATE TABLE Orders如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders当 "Orders" 表已被创建时,如需在 "P_Id" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:
MySQL:
ALTER TABLE OrdersSQL Server / Oracle / MS Access:
ALTER TABLE Orders在创建表后增加外键约束
ALTER TABLE 表名
ADD CONSTRAINT 外键约束名
FOREIGN KEY (column1, column2,...column_n)
REFERENCES 外键所依赖的表 (column1,column2,...column_n)
ON DELETE CASCADE;--级联删除
使用工具plsql来新增外键约束
注意,在创建外键约束时,必须先创建外键约束所依赖的表,并且该列为该表的主键
小胖纸
155***1286@qq.com
小胖纸
155***1286@qq.com
create table father( f_no number(2));--插入数据1 2 3 4 create table son( s_no number(2), f_no number(2))--插入两列1 2 3 4 --删除父表数据 delete from father where f_no=1 --报错违反约束 --删除父表 drop table father --报错违反约束 --更新父表数据 --禁用约束可以更新ALTER TABLE son disable constraint f_f; update father set f_no =7 where f_no=1--报错违反约束 --对父表插入数据 insert into father values(6)--可以插入 --删除子表数据 delete from son where s_on=1--可以删除 --删除子表 drop table son--可以删除 --更新子表数据 update son set s_no=6 where s_no=1 --可以更新 update son set f_no=6 where s_no=6 --可以更新 --对子表插入数据 insert into son values(7,7)--父表没有7,违反约束 insert into son values(1,1)--父表有1可以插入 insert into son values(8,1)--父表有1可以插入
a.因为子表与父表一一对应,删除父表数据时,需要先把子表对应数据删除否则无法删除
CASCADE指当删除主表中被引用列的数据时,级联删除子表中相应的数据行。