mysql:14397
From: Alex <Alex <alex_backspin@xxxxxxxxxx>>
Date: Tue, 26 Feb 2008 08:53:33 +0900
Subject: [mysql 14397] Re: データ更新の履歴
chuuken kenkouさん、 ALEXです、ご情報ありがとうございました。 大変参考になりました。 chuuken kenkou wrote: > 追記です。 > > DELETE前のデータなら、下記の例と同様、DELETEトリガでOLDで列名を参照してください。 > > >> Date: Fri, 22 Feb 2008 17:47:39 +0900 >> From: ken_ken_1962@xxxxxxxxxx >> Subject: [mysql 14394] Re: データ更新の履歴 >> To: ml@xxxxxxxxxx >> >> >> 更新前のデータを履歴に残したいのだから、「BEFORE INSERT ON t」でなく、「BEFORE UPDATE ON t」になります。 >> 更新前データは、「OLD.列名」で参照でき、更新後データは、「NEW.列名」で参照できます。 >> >> >> -- 表定義例 >> create table tbl1 >> (clm1 int primary key, >> clm2 int, >> clm3 varchar(10)); >> create table log_tbl1 >> (clm1 int, >> clm2 int, >> clm3 varchar(10), >> upd_user varchar(30), >> tmst timestamp); >> >> -- トリガ定義例 >> delimiter // -- 終端記号を変更 >> create trigger upd_tbl1 before update on tbl1 >> for each row >> begin >> insert into log_tbl1(clm1,clm2,clm3,upd_user) >> values(old.clm1,old.clm2,old.clm3,current_user); >> end >> ; >> // >> delimiter ; -- 終端記号を元に戻す >> >> >> -- テスト用データ格納例 >> insert into tbl1 values(1,0,'a'); >> insert into tbl1 values(2,0,'b'); >> insert into tbl1 values(3,0,'c'); >> insert into tbl1 values(4,0,'d'); >> insert into tbl1 values(5,0,'e'); >> >> -- 更新してみる >> update tbl1 >> set clm2=clm2+1,clm3=concat(clm3,'x') >> where clm1=3; >> >> -- トリガの結果確認 >> select * from log_tbl1; >> >> >>> Date: Fri, 22 Feb 2008 17:27:16 +0900 >>> From: alex_backspin@xxxxxxxxxx >>> Subject: [mysql 14393] Re: データ更新の履歴 >>> To: ml@xxxxxxxxxx >>> >>> 近藤さま、 >>> >>> 解答ありがとうございます。 >>> >>> バージョンは5.0.22で、ubuntu 6.06.1 LTS にて使っています。 >>> >>> トリガーを使用するとき、 >>> >>> mysql> CREATE TRIGGER t_bi >>> -> BEFORE INSERT ON t >>> -> FOR EACH ROW >>> -> INSERT INTO bk_table value ・・・?; >>> >>> 更新前のデータを別のテーブルにインサートするには、上記のような形となるの >>> でしょうか? >>> このとき、INSERT構文をどのように書けばよいのかご教授頂けませんでしょうか? >>> >>> >>> nobu wrote: >>>> 近藤です。 >>>> >>>> MySQLのバージョンはいくつでしょうか? >>>> MySQLに限ったことではありませんが、そのような要件の際に私はトリガー >>>> を使用しています。MySQL5.0以上であればトリガーが使えたかと思います。 >>>> >>>> 以上 >>>> >>>> >>>> >>>> Alex さんは書きました: >>>>> こんにちは、ALEXです。 >>>>> >>>>> MySQLの任意のテーブル内のでデータを更新したとき、更新前のデータを自動的 >>>>> にどこかに保管するような仕組みはないものでしょうか。 >>>>> データが変更されたときの履歴を取りたいのが目的です。 >>>>> よろしくお願い致します。 >>>>> >>>>> >>>> >>>> >> _________________________________________________________________ >> 「脳内メーカー」の次は「鞄の中身メーカー」? Live Search で検索! >> http://search.msn.co.jp/results.aspx?q=%E9%9E%84%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC&FORM=MGCEAA >> > > _________________________________________________________________ > 栄養不足?MSN相談箱で「サプリメント」について知ろう! > http://questionbox.msn.co.jp/search.php3?start=0&pt=0&qt=all&k=pbWl16XqpeGl86XI > >
14391 2008-02-22 15:18 [Alex <alex_backspin@] データ更新の履歴 14392 2008-02-22 15:48 ┗[nobu <mininobu@xxxxx] 14393 2008-02-22 17:27 ┗[Alex <alex_backspin@] 14394 2008-02-22 17:47 ┗[chuuken kenkou <ken_] 14395 2008-02-22 17:53 ┗[chuuken kenkou <ken_] -> 14397 2008-02-26 08:53 ┗[Alex <alex_backspin@]