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

回答編集履歴

1

sample

2017/04/13 03:37

投稿

yambejp
yambejp

スコア118110

answer CHANGED
@@ -7,4 +7,43 @@
7
7
 
8
8
  むしろ$_REQUESTの値をつかってUPDATE文を発行して、影響がなければすなわち
9
9
  $_REQUESTを投入しないし、影響があればUPDATEされるのだから
10
- 単にUPDATE文を1回発行するだけで良い話のような気がします
10
+ 単にUPDATE文を1回発行するだけで良い話のような気がします
11
+
12
+ # trigger sample
13
+ データ用テーブルAと履歴用テーブルB
14
+ テーブルAのaidは主キーだが履歴を取る場合Bの主キーにはナリえないのでBに新たに
15
+ 主キーbidを設定し、更新された日時も別途保存することとする
16
+ ```SQL
17
+ create table tblA(aid int primary key,val1 int,val2 int,val3 int);
18
+ create table tblB(bid int primary key auto_increment,aid int ,val1 int,val2 int,val3 int,modified datetime);
19
+ ```
20
+ トリガー作成
21
+ ```SQL
22
+ drop trigger if exists a_to_b;
23
+ delimiter //
24
+ create trigger a_to_b after update on `tblA`
25
+ for each row begin
26
+ insert into tblB SET aid=old.aid,val1=old.val1,val2=old.val2,val3=old.val3,modified=now();
27
+ end;
28
+ //
29
+ delimiter ;
30
+ ```
31
+ (1)データ投入
32
+ ```SQL
33
+ insert into tblA values(1,101,201,301),(2,102,202,302),(3,103,203,303);
34
+ ```
35
+ tblAにはデータが新規投入されるが、tblBには投入されない
36
+
37
+ (2)更新データを投入
38
+ ```SQL
39
+ insert into tblA values(2,112,212,312),(4,104,204,304) on duplicate key update val1=values(val1),val2=values(val2),val3=values(val3);
40
+ ```
41
+ id=2は更新されるのでtblBに古いデータが投入される、id=4は新規なので無視
42
+
43
+ (3)更新データを投入
44
+ ```SQL
45
+ insert into tblA values(2,122,222,322),(4,104,204,304) on duplicate key update val1=values(val1),val2=values(val2),val3=values(val3);
46
+ ```
47
+ id=2は更新されるのでtblBに古いデータが投入される
48
+ (tblBのidはダブっているのが確認できる)
49
+ id=4は全てのvalが元のデータと一緒なので更新がかからないので無視