1. ホーム
  2. mysql

[解決済み] MySQL 4.0でのCreatedとLast Updatedのタイムスタンプ列を持つこと

2022-07-05 01:26:44

質問

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

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フィールドを設定しなければならないのでしょうか?

どのように解決するのですか?

から MySQL 5.5 ドキュメント :

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

の変更点 MySQL 5.6.5 :

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