私は多くの関連する質問を見てきましたが、この特定の質問に指を置くことができません:
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を使用しています。
DATETIME
は更新時にCURRENT_TIMESTAMP
を使用できません。代わりに、TIMESTAMP
に変更してください。
または、この状況でトリガーを使用することを検討してください: http://dev.mysql.com/doc/refman/5.0/en/trigger-syntax.html
編集:コメントのように(@АлександрФиksерに感謝!)、これはMySQL 5.6.5以降では当てはまらないため、別の解決策は可能であればサーバーをアップグレードすることです。
この機能は5.6で導入されたようです。デフォルトのOS Xインストールで期待どおりに動作します。
MySQLでは、デフォルトのDateTime
値に関数を使用できません。 (MySQLデータタイプ デフォルト を参照してください。)
日付と時刻を自動的に挿入および更新
データタイプで動作します: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
...
);
TIMESTAMPおよび(MySQL 5.6.5以降)DATETIMEデータ型は、自動初期化と現在の日付と時刻への更新を提供します。詳細については、 セクション11.3.5「TIMESTAMPおよびDATETIMEの自動初期化および更新」 を参照してください。
ええ、それをtimestampに変更すると、どちらもDEFAULT CURRENT_TIMESTAMP
もON UPDATE CURRENT_TIMESTAMP
、両方を指定するのと同じですDEFAULT CURRENT_TIMESTAMP
およびON UPDATE CURRENT_TIMESTAMP
。