web-dev-qa-db-ja.com

MySQLはDATETIMEフィールドにON UPDATE CURRENT_TIMESTAMPを許可していません

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

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

私が読んだすべての場所(Stack Overflowでも)では、これを実行できるはずですが、このエラーが発生しています。おそらく、フィールドを更新するたびに自動的に時刻を更新する別の方法がありますか?

MySQL Server 5.5を使用しています。

15
Michael Plautz

DATETIMEは更新時にCURRENT_TIMESTAMPを使用できません。代わりに、TIMESTAMPに変更してください。

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

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

28
slugonamission

この機能は5.6で導入されたようです。デフォルトのOS Xインストールで期待どおりに動作します。

参照: MySQL 5.6.5より前の自動タイムスタンププロパティ

5
rich remer

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

2
Anshu

日付と時刻を自動的に挿入および更新

データタイプで動作します: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
    ...
);
1
SandroMarques

TIMESTAMPおよび(MySQL 5.6.5以降)DATETIMEデータ型は、自動初期化と現在の日付と時刻への更新を提供します。詳細については、 セクション11.3.5「TIMESTAMPおよびDATETIMEの自動初期化および更新」 を参照してください。

0
原习斌

ええ、それをtimestampに変更すると、どちらもDEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP、両方を指定するのと同じですDEFAULT CURRENT_TIMESTAMPおよびON UPDATE CURRENT_TIMESTAMP

0
FSP

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

列のフィールドタイプtimestamp、属性、更新時のCURRENT_TIMESTAMPおよび追加も設定します。私の場合、データベースのフィールドタイプを変更した後は問題ありません。しかし、すべての場合についてはわかりません。 enter image description here

0
Shihab Uddin