スポンサーサイト

スポンサー広告
-- /-- --
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

MySQLのTIMESTAMP型

MySQL
07 /03 2008

ふと気づくと、このサイトを立ち上げてから丁度1年が経過していた。丸1年放置していたわけだ。
もったいないのでこのサイトを使って、開発時の備忘録を残すことにする。

第1回は、MySQLのTIMESTAMP型について。
これについては以前も1度ハマった事があるが、またやってしまったので、忘れないようにここに書いておくことにする。

TIMESTAMP型とDATETIME型は似ているが、決定的な違いがある。
テーブルの最初にあるTIMESTAMP型のフィールドは、自動更新されると言うことだ。
例えば、次のようなケース。

CREATE TABLE tablename VALUES (id INT, create_dtm TIMESTAMP, update_dtm TIMESTAMP, a INT);
INSERT INTO tablename VALUES (1, NOW(), NOW(), 3);
UPDATE tablename SET update_dtm=NOW(), a=4 WHERE id=1;

この場合、影響を受けるのは update_dtm と a だけのように見えるが、実際には create_dtm にも NOW() がセットされてしまう。
回避するには、明示的に
UPDATE tablename SET create_dtm=create_dtm, update_dtm=NOW(), a=4 WHERE id=1;
と書くか(これは美しくない)、TIMESTAMP型でなくDATETIME型にする(この場合、テーブル内のどの列にもTIMESTAMP型がないようにしなければ意味がない)。

MySQLの設計者は便利な機能として提供してくれているのだろうが、大きなお世話だと思う。

コメント

非公開コメント

Paq

忘れっぽい中年プログラマが、日々の開発作業の中で、忘れると困ることを書き留めています。

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。