次のテーブル スキーマがあります。
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
テーブル内の 1 つの TIMESTAMP 列には、列を初期化するためのデフォルト値として、自動更新値として、またはその両方として、現在のタイムスタンプを設定できます。現在のタイムスタンプを 1 つの列のデフォルト値とし、別の列の自動更新値にすることはできません。
以前は、テーブルごとに最大 1 つの TIMESTAMP 列が自動的に初期化されるか、現在の日付と時刻に更新されることができました。この制限は解除されました。TIMESTAMP 列定義には、DEFAULT CURRENT_TIMESTAMP 句と ON UPDATE CURRENT_TIMESTAMP 句を任意に組み合わせることができます。さらに、これらの句は DATETIME 列定義でも使用できるようになりました。詳細については、「TIMESTAMP および DATETIME の自動初期化と更新」を参照してください。