0

2 つのタイムスタンプ列を持つテーブルを作成しようとしています。1 つは行が作成されたとき用で、もう 1 つは行が更新されたとき用です。これが私がこれまでに試したことです:

CREATE TABLE `tmp` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `data` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
   `created` timestamp NOT NULL ,
   `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

しかし、私はこのエラーが発生しています:

テーブル定義が正しくありません。DEFAULT または ON UPDATE 句で CURRENT_TIMESTAMP を持つ TIMESTAMP 列は 1 つだけ存在できます

4

3 に答える 3

1

これは、MySQL 5.6 で実行できます (この記事の執筆時点ではリリース候補として利用できますが、まだ本番環境には対応していません)。

MySQL 5.6.5 の時点で、TIMESTAMP および DATETIME カラムは自動的に初期化され、現在の日時 (つまり、現在のタイムスタンプ) に更新されます。5.6.5 より前では、これは TIMESTAMP にのみ当てはまり、テーブルごとに最大で 1 つの TIMESTAMP カラムに当てはまります。テーブルの TIMESTAMP または DATETIME カラムには、現在のタイムスタンプをデフォルト値として割り当てることができます。値、またはその両方

于 2012-11-22T19:06:19.220 に答える
1

これは MYSQL 制約です。デフォルト値が systime になる列を 1 つだけ持つことができます。

この質問も参照できます 「現在のタイムスタンプを更新する」を既存のテーブル列に追加する方法

于 2012-11-22T18:43:54.300 に答える
0

created挿入にタイムスタンプを個別に追加するトリガーを作成できます

delimiter |
CREATE TRIGGER add_created_ts BEFORE INSERT on `tmp`
FOR EACH ROW
BEGIN
   SET NEW.created = current_timestamp;
END
|
delimiter ;
于 2012-11-22T18:57:42.377 に答える