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

回答編集履歴

1

追記

2017/06/01 01:28

投稿

yambejp
yambejp

スコア117967

answer CHANGED
@@ -1,4 +1,35 @@
1
1
  変更がなければ同じデータのままなのであえて
2
2
  例外処理はいらないのでは?
3
3
  それとも複数件UPDATE中に1件でも更新できないデータがあれば
4
- 全部取り消したいのでしょうか?
4
+ 全部取り消したいのでしょうか?
5
+
6
+ # 確認
7
+
8
+ 具体的に以下の場合はどうするか指示ください
9
+ 仮にサンプルのテーブルが用意されているとして
10
+ ```SQL
11
+ CREATE TABLE tbl(id INT NOT NULL PRIMARY KEY,val INT);
12
+ INSERT INTO tbl VALUES(1,1),(2,2),(3,3);
13
+ ```
14
+
15
+ (1)存在しないidを指定された時
16
+ UPDATE tbl SET val=5 WHERE id=5;
17
+ 命題のとおりだとupdateされないので中止要件に入ります
18
+
19
+ (2)同じデータが2度出てくる時-パターン1
20
+ UPDATE tbl SET val=10 WHERE id=1;
21
+ としたあと、再度
22
+ UPDATE tbl SET val=10 WHERE id=1;
23
+ が実行された場合、2度めのupdateはされないので中止?
24
+
25
+ (3)同じデータが2度出てくる時-パターン2
26
+ UPDATE tbl SET val=20 WHERE id=2;
27
+ としたあと、元のデータである
28
+ UPDATE tbl SET val=2 WHERE id=2;
29
+ に戻すような処理がされた場合、本来なら中止されないが
30
+ 題意からするともともとid=2はval=2だったわけで、理論的には
31
+ 同じデータで更新がかかっている
32
+
33
+ また、そもそもユニークなidを使ってデータ更新している前提で話していますが
34
+ 実際にはユニークなキーを元に更新するとは一言も指定されていないため
35
+ 提示された仕様では回答のしようがありません