次のような2つのTIMESTAMPフィールドを持つテーブルを定義します。
CREATE TABLE `msgs` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`msg` VARCHAR(256),
`ts_create` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`ts_update` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
エラーを回避してこれを行う方法:
ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
ポイントは、テーブルスキーマでts_create
とts_update
の望ましい動作を維持することです。
これはmySQLの制限です。cannotには、CURRENT_TIMESTAMPを参照するデフォルトのTIMESTAMP列が2つあります。それを行う唯一の方法は、ts_createにDATETIME型を使用することであり、残念ながらNOW()のデフォルト値を持つことはできません。ただし、独自のトリガーを実行して、それを実現することができます。
これは古い投稿だと思いますが、実際にはmysqlは最近のエディションで2つのTIMESTAMPをサポートしていると思います。
古いバージョンのMySqlを使用しています。 mysqlを5.6.5+に更新すると動作します。
私はそれが以下の手法を使用することによって可能だと思う
`ts_create` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`ts_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
テーブルに同じデフォルト値のCURRENT_TIMESTAMPを持つ2つのTIMESTAMP列を持つことはできません。このリンクを参照してください: http://www.mysqltutorial.org/mysql-timestamp.aspx
これを試すことができますts_create
TIMESTAMP DEFAULT CURRENT_TIMESTAMP、ts_update
TIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
Ts_createをdatetimeとして(したがって、名前を変更-> dt_create)、ts_updateだけをタイムスタンプとして使用したいのではないでしょうか。これにより、設定後に変更されないようになります。
私の理解では、datetimeは手動で制御される値用であり、タイムスタンプはMySQLがそれを維持するという点で少し「特別」です。したがって、この場合、date_timeはts_createの適切な選択です。
Ts_updateにDEFAULT CURRENT_TIMESTAMPを設定する必要はありません。空の場合は更新されないため、「最終更新」はts_createです。
これは、旧バージョンのMysqlの小さな制限であり、実際にはバージョン5.6以降では複数のタイムスタンプが機能します...