[前][次][番号順一覧][スレッド一覧]

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@]