指定如果试图更新某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。为了执行此约束,目 标表的所有外键列必须具有默认定义。如果某个列可为空值,并且未设置显式的默认值,则将使用 NULL 作为该列的隐式默认值。因 ON UPDATE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。
1.
如果linecenter(主表)中的一个lid被删除了,那么引用该lid的从表中的所有记录也被删除。
通常称为
级联删除
SQL> create table test (id number(7) not null, name varchar2(20),
2 c
on
straint pk_test primary key (id));
表已创建。
SQL> create table test1 (id number(7) not null, comments varchar(400),
2 c
on
straint fk_test1 foreign key (id) references test (id));
表已创建。
SQL> create table test2 (id number(7) not null, commects varchar(400),
2 c
on
straint fk_test2 foreign key (id) references test (id)
on
delete
cascade
);
表已创建。
SQL> insert into test values (1, 'abc');
已创建 1 行。
SQL> insert into test1 values (1, 'aaaaa');
已创建 1 行。
SQL>
delete
test;
delete
test
ERROR 位于第 1 行:
ORA-02292: 违反完整约束条件 (YANGTK.FK_TEST1) - 已找到子记录日志
SQL>
delete
test1;
已删除 1 行。
SQL>
delete
test;
已删除 1 行。
SQL> insert into test values (1, 'abc');
已创建 1 行。
SQL> insert into test2 values (1, 'aaaaa');
已创建 1 行。
SQL>
delete
test;
已删除 1 行。
SQL> select * from test;
SQL> select * from test2;