19

関連する多くの質問を見てきましたが、この特定の質問に指を置くことはできません。

TIMESTAMP (フィールドが作成されたとき) と DATETIME (フィールドが更新されるたび) の両方を持つ MySQL テーブルがあります。次のようになります。

CREATE TABLE 'vis' (
ID BIGINT PRIMARY KEY AUTO_INCREMENT NOT NULL,
ENTRY VARCHAR(255),
AUTHOR VARCHAR(255),
CREATED_AT TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UPDATED_AT DATETIME ON UPDATE CURRENT_TIMESTAMP,
UPDATED_BY VARCHAR(255)
)

ただし、これを試してみると、次のエラーが表示されます。(SQL Error: 1294 SQL State: HY000) - Invalid ON UPDATE clause for 'updated_at' field

私が読んだどこでも(スタックオーバーフローでも)、これを実行できるはずだと示唆していますが、このエラーが発生しています。おそらく、更新するたびに自動的に時間を更新するフィールドを持つ別の方法があるでしょうか?

MySQL サーバー 5.5 を使用しています。

4

7 に答える 7

32

DATETIMECURRENT_TIMESTAMPアップデートで使えません。代わりに、に変更しTIMESTAMPます。

または、この状況でトリガーを使用することを検討してください: http://dev.mysql.com/doc/refman/5.0/en/trigger-syntax.html

編集: コメントのように (@АлександрФишер に感謝!)、これは MySQL 5.6.5 以降では当てはまらないため、別の解決策は、可能であればサーバーをアップグレードすることです。

于 2012-10-14T13:38:58.477 に答える
2

MySQLでは、関数をデフォルト値に使用することはできませんDateTime。(MySQLデータ型のデフォルトを参照してください。)

于 2012-10-14T13:40:33.247 に答える
1

INSERT および UPDATE 日付/時刻を自動的に

データ型で動作: DATETIME または TIMESTAMP

テスト済み: MySQL 5.6.27-2 および MariaDB 10.1.10


INSERTに現在の日付と時刻を格納します

CREATE TABLE table_demo (
    ...
    `CreatedAt` datetime DEFAULT CURRENT_TIMESTAMP
    ...
);

INSERTおよびUPDATEで現在の日付と時刻を格納します

CREATE TABLE table_demo (
    ...
    `UpdatedAt` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    ... 
);

UPDATEでのみ現在の日付と時刻を格納します。

注: INSERT の場合、デフォルト値は「0000-00-00 00:00:00」です。

CREATE TABLE table_demo (
    ...
    `UpdatedAt` datetime DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP
    ...
);
于 2016-05-30T11:31:09.697 に答える
0
于 2015-11-20T01:51:00.400 に答える
0

ええ、それを timestamp に変更すると、 or なしで、 とDEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP両方を指定するのと同じにDEFAULT CURRENT_TIMESTAMPなりON UPDATE CURRENT_TIMESTAMPます。

于 2012-10-14T13:39:43.653 に答える
0

私の写真を見てください。

列のファイル タイプのタイムスタンプ、更新時の属性、CURRENT_TIMESTAMPおよび Extra も設定します。私の場合、データベースのファイルタイプを変更しても問題ありません。しかし、すべての場合についてはわかりません。ここに画像の説明を入力

于 2016-07-11T09:10:23.637 に答える