多表關聯的情況下,刪除主表的一條資料,同時修改與主表關聯的從表對應資料,如 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. 外連線組合兩個表
表1 person 列名 型別 personid int firstname varchar lastname varchar personid 是上表主鍵 表2 address 列名 型別 addressid int personid int city varchar state varchar ...
只有兩個鍵的鍵盤
最初在乙個記事本上只有乙個字元 a 你每次可以對這個記事本進行兩種操作 copy all 複製全部 你可以複製這個記事本中的所有字元 部分的複製是不允許的 paste 貼上 你可以貼上你上一次複製的字元。給定乙個數字 n 你需要使用最少的操作次數,在記事本中列印出恰好 n 個 a 輸出能夠列印出 n...
只有兩個鍵的鍵盤
最初在乙個記事本上只有乙個字元 a 你每次可以對這個記事本進行兩種操作 copy all 複製全部 你可以複製這個記事本中的所有字元 部分的複製是不允許的 paste 貼上 你可以貼上你上一次複製的字元。給定乙個數字 n 你需要使用最少的操作次數,在記事本中列印出恰好 n 個 a 輸出能夠列印出 n...