[ MySQL ] TIMESTAMP 型が自動更新?ムカついたので全部やめた

Pocket

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)
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *