1. ホーム
  2. マイスル

[解決済み】datetime datatypeのデフォルト値としてNOW()を設定する?

2022-04-11 07:51:47

質問

テーブルユーザーの中に、次の2つの列があります。 registerDate and lastVisitDate で、datetime データ型から構成されています。私は次のようにしたいと思います。

  1. registerDateのデフォルト値をMySQLのNOW()に設定する。
  2. lastVisitDateのデフォルト値を以下に設定します。 0000-00-00 00:00:00 デフォルトで使用されるnullの代わりに。

テーブルがすでに存在し、既存のレコードがあるため、テーブルの修正を使用したいのです。 以下の2つのコードを使ってみましたが、どちらもうまくいきません。

ALTER TABLE users MODIFY registerDate datetime DEFAULT NOW()
ALTER TABLE users MODIFY registerDate datetime DEFAULT CURRENT_TIMESTAMP;

それは私にエラーを与える: ERROR 1067 (42000): Invalid default value for 'registerDate'

MySQLで、デフォルトのdatetime値をNOW()に設定することは可能でしょうか?

どのように解決するのですか?

MySQL 5.6.5以降では、MySQLを利用する際に DATETIME 型に動的なデフォルト値を指定します。

CREATE TABLE foo (
    creation_time      DATETIME DEFAULT   CURRENT_TIMESTAMP,
    modification_time  DATETIME ON UPDATE CURRENT_TIMESTAMP
)

あるいは、両方のルールを組み合わせることもできます。

modification_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

参考

http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html

http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available.html

5.6.5より前のバージョンでは TIMESTAMP このデータ型は、レコードが変更されるたびに自動的に更新されます。しかし、残念なことに、自動更新された TIMESTAMP フィールドは1つのテーブルに存在することができます。

CREATE TABLE mytable (
  mydate TIMESTAMP
)

ご覧ください。 http://dev.mysql.com/doc/refman/5.1/en/create-table.html

のタイムスタンプ値をMySQLが更新しないようにしたい場合。 UPDATE (にのみトリガーされるように)。 INSERT )に定義を変更することができます。

CREATE TABLE mytable (
  mydate TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)