测试以两个外键为复合主键的表,两个外键空值情况

来源:互联网 发布:matlab 矩阵动态添加 编辑:程序博客网 时间:2024/04/28 18:05

测试以两个外键为复合主键的表,两个外键空值情况

多表关联的情况下,删除主表的一条数据,同时修改与主表关联的从表对应数据,如 tbl_a表,tbl_b表,两表交互表tbl_a_b。当tbl_a中的数据某条数据删除时,需要先清除tbl_a_b表中对应的数据才能删除tbl_a中的数据,但有时不想删除tbl_a_b的数据,就需把tbl_a_b中对应的a_id改为一个无价值的值。首先想到的就是null。

建表tbl_a:

    create table tbl_a(a_id int primary key);

新增测试数据:

    insert into tbl_a values(1);    insert into tbl_a values(2);

建表tbl_b

    create table tbl_b(b_id int primary key);

新增测试数据:

    insert into tbl_b values(10);    insert into tbl_b values(9);

建tbl_a和tbl_b的交互表tbl_a_b:

    create table tbl_a_b(        a_id int,        b_id int,        constraint FK_a foreign key(a_id) references tbl_a(a_id),        constraint FK_b foreign key(b_id) references tbl_b(b_id),        constraint PK_key_a_b primary key(a_id,b_id)        );

1.交互表tbl_a_b新增a_id,b_id不为空的数据:

insert into tbl_a_b values(1,10);

新增成功。

2.交互表tbl_a_b新增a_id为空的数据:

insert into tbl_a_b values(null,10);

报错:ORA-01400 a_id不能为空

3.交互表tbl_a_b修改a_id改为null的为空的数据:

update tbl_a_b set a_id=null;

报错:ORA-01407 a_id不能更新为null。

经测试,无法将复合主键中的某一项改为null,只能在tbl_a表与tbl_b表中新增一条无用数据:

    insert into tbl_b values(0);    insert into tbl_a values(0);

tbl_a表与tbl_b表每次删除数据时,将tbl_a_b中对应的a_id,b_id 值更新为0.

阅读全文
0 0
原创粉丝点击