回答編集履歴

1

調整

2020/05/24 08:37

投稿

yambejp
yambejp

スコア114572

test CHANGED
@@ -7,3 +7,111 @@
7
7
  しかし原則ユニークでない外部キー制約はありえないので
8
8
 
9
9
  考え方がおかしいです
10
+
11
+
12
+
13
+ # 追記
14
+
15
+ 具体的にやってみます
16
+
17
+ ```SQL
18
+
19
+ create table tbl_a (aid int primary key,aval varchar(10));
20
+
21
+ create table tbl_b (bid int primary key ,bval varchar(10),aid int,foreign key fk_b(aid) references tbl_a(aid) on update cascade);
22
+
23
+
24
+
25
+ insert into tbl_a values(1,'a1'),(2,'a2'),(3,'a3');
26
+
27
+ insert into tbl_b values(1,'b1',1),(2,'b2',3),(3,'b3',1);
28
+
29
+ ```
30
+
31
+ ここで、tbl_aにアップデートをかけ、tbl_bを確認します
32
+
33
+
34
+
35
+ ```SQL
36
+
37
+ update tbl_a set aid=100 where aid=1;
38
+
39
+ select * from tbl_b;
40
+
41
+ ```
42
+
43
+
44
+
45
+ |bid|bval|aid|
46
+
47
+ |--:|--:|--:|
48
+
49
+ |1|b1|100|
50
+
51
+ |2|b2|3|
52
+
53
+ |3|b3|100|
54
+
55
+
56
+
57
+ tbl_bの外部キーを削除し、tbl_aのprimay keyを解除したうえで
58
+
59
+ tbl_bの外部キーを張りなおします
60
+
61
+
62
+
63
+ ```SQL
64
+
65
+ alter table tbl_b drop foreign key fk_b;
66
+
67
+ alter table tbl_a drop primary key;
68
+
69
+ alter table tbl_a add index aid(aid);
70
+
71
+ alter table tbl_b add foreign key fk_b(aid) references tbl_a(aid) on update cascade;
72
+
73
+ ```
74
+
75
+ tbl_aのaidはすでにユニークである必要はないのでaid=3を変更して
76
+
77
+ だぶらせます
78
+
79
+ ```SQL
80
+
81
+ update tbl_a set aid=100 where aid=3;
82
+
83
+ ```
84
+
85
+
86
+
87
+ - tbl_a
88
+
89
+
90
+
91
+ |aid|aval|
92
+
93
+ |--:|--:|
94
+
95
+ |100|a1|
96
+
97
+ |2|a2|
98
+
99
+ |100|a3|
100
+
101
+
102
+
103
+ tbl_bは更新されています
104
+
105
+ - tbl_b
106
+
107
+
108
+
109
+ |bid|bval|aid|
110
+
111
+ |--:|--:|--:|
112
+
113
+ |1|b1|100|
114
+
115
+ |2|b2|100|
116
+
117
+ |3|b3|100|