MySQL 4.0で作成日時と最終更新日時のタイムスタンプ列の両方を持つ質問する

MySQL 4.0で作成日時と最終更新日時のタイムスタンプ列の両方を持つ質問する

次のテーブル スキーマがあります。

CREATE TABLE `db1`.`sms_queue` (
  `Id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `Message` VARCHAR(160) NOT NULL DEFAULT 'Unknown Message Error',
  `CurrentState` VARCHAR(10) NOT NULL DEFAULT 'None',
  `Phone` VARCHAR(14) DEFAULT NULL,
  `Created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `LastUpdated` TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,
  `TriesLeft` tinyint NOT NULL DEFAULT 3,
  PRIMARY KEY (`Id`)
)
ENGINE = InnoDB;

次のエラーが発生して失敗します。

ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause.

私の質問は、これらのフィールドを両方とも持つことはできますか? それとも、各トランザクション中に LastUpdated フィールドを手動で設定する必要がありますか?

ベストアンサー1

からMySQL 5.5ドキュメンテーション:

テーブル内の 1 つの TIMESTAMP 列には、列を初期化するためのデフォルト値として、自動更新値として、またはその両方として、現在のタイムスタンプを設定できます。現在のタイムスタンプを 1 つの列のデフォルト値とし、別の列の自動更新値にすることはできません。

変更内容MySQL 5.6.5:

以前は、テーブルごとに最大 1 つの TIMESTAMP 列が自動的に初期化されるか、現在の日付と時刻に更新されることができました。この制限は解除されました。TIMESTAMP 列定義には、DEFAULT CURRENT_TIMESTAMP 句と ON UPDATE CURRENT_TIMESTAMP 句を任意に組み合わせることができます。さらに、これらの句は DATETIME 列定義でも使用できるようになりました。詳細については、「TIMESTAMP および DATETIME の自動初期化と更新」を参照してください。

おすすめ記事