MySQL には、Timestamp 型カラムの自動更新機能が存在するようです。
どうも、この自動更新がファイヤーしたようなのですが、心当たりがありません。MySQL のバージョンも 5.5 ( on Windows7 ) ですので、ファイヤーしないと思うのですが自動更新されているような事象がありましたので、備忘録として残しておきます。
正直、今となってはどうでも良いことなのですが。。。
スポンサーリンク
テーブルの作成
タイムスタンプが自動更新された状況をテーブルの作成から順に記載していきます。
create table table1 ( entry_date timestamp, accept_date timestamp );
1レコードのみ存在している状態です。
mysql> select * from table1; +---------------------+---------------------+ | entry_date | accept_date | +---------------------+---------------------+ | 2011-01-01 10:10:10 | 2011-01-01 10:10:10 | +---------------------+---------------------+ 1 row in set (0.00 sec)
UPDATE 文の発行
この状態で以下のように UPDATE 文を発行すると、accept_time のみならず entry_date までも更新されました。
mysql> update table1 set accept_date=now(); Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from table1; +---------------------+---------------------+ | entry_date | accept_date | +---------------------+---------------------+ | 2012-05-07 16:09:32 | 2012-05-07 16:09:32 | +---------------------+---------------------+ 1 row in set (0.00 sec)
Why??何故に?? 仕方がありません。星に祈りながら矢沢永吉の「アリよさらば」も歌ってみました。
MySQL には効果がないようです。へんじがない。ただのしかばねのようだ。次はドラクエでもやってみることにします。ウソです。やりません。
自動更新の無効化
次のように UPDATE 文を変更することで accept_date のみタイムスタンプを更新することができました。が、こんな面倒なことはやってられませんので、色々全部やめました。
mysql> update table1 set entry_date=entry_date, accept_date=now(); Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from table1; +---------------------+---------------------+ | entry_date | accept_date | +---------------------+---------------------+ | 2012-05-07 16:09:32 | 2012-05-07 16:19:11 | +---------------------+---------------------+ 1 row in set (0.00 sec)