teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

不具合現象について情報を追加。

2019/02/21 14:25

投稿

Take_it
Take_it

スコア357

title CHANGED
File without changes
body CHANGED
@@ -27,6 +27,7 @@
27
27
  numは表示順を入れ替えることを想定して付与しています。必ず整数値です。
28
28
  (上記の例で班3を班2の上に表示したい場合、班3のレコードのnumを2に、班2のレコードのnumを3に入れ替える)
29
29
  regionには必ず整数値を入力します。
30
+ delはデフォルトでNULLです。該当レコードを使用しなくなった場合にフラグを立ててSELECT対象から除外するためのカラムです。
30
31
 
31
32
  このテーブルに対し、
32
33
  ```MySQL
@@ -51,7 +52,20 @@
51
52
 
52
53
  上記の状態から、班1を班2や3に書き換えることも、班2や3を班1に書き換えることもできてしまうのです。
53
54
  (班4を班1に書き換えることはregionが異なるのでOKですが、regionとnameがどちらも同じなのは困るのです)
55
+ また、新たにレコードを追加する場合も、name=班1、region=1が追加できてしまいます。
54
56
 
57
+ しかし、一度追加して、
58
+
59
+ (1, 1, ' 班1', 1, NULL),
60
+ (2, 2, '班2', 1, NULL),
61
+ (3, 3, '班3', 1, NULL),
62
+ (4, 4, '班4', 2, NULL);
63
+ (5, 5, ' 班1', 1, NULL),
64
+
65
+ この状態になってから更に name=班1、region=1 を追加しようとすると撥ねられます。
66
+
67
+ このことから、UNIQUEかどうかの検査対象からgroup_id=1のレコードが漏れていると思われます。
68
+
55
69
  編集前にPHPでデータを読み出して検査するなんていう強引な手法も考えましたが・・・そんなことしなくても、MySQL側で本来は解決できるはずですよね。。
56
70
 
57
71
  解決策・何か試すべき方法その他、助言をいただければ幸いです。