211

テーブルusersに2つの列があります。つまりregisterDate and lastVisitDate、日時データ型で構成されています。次のことをしたいと思います。

  1. registerDateのデフォルト値をMySQLNOW()に設定します
  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でデフォルトの日時値をNOW()に設定することは可能ですか?

4

13 に答える 13

265

DATETIMEMySQL 5.6.5 では、動的なデフォルト値を持つタイプを使用できます。

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

TIMESTAMP5.6.5 より前では、レコードが変更されるたびに自動的に更新されるデータ型を使用する必要があります。ただし、残念ながら、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
)
于 2011-04-28T12:16:51.607 に答える
47

私の解決策

ALTER TABLE `table_name` MODIFY COLUMN `column_name` TIMESTAMP NOT
NULL DEFAULT CURRENT_TIMESTAMP;
于 2012-10-25T00:11:54.217 に答える
14

エウレカ!!!


MySQL でデフォルトの DATETIME 値を設定しようとして落胆したすべての人にとって、私はあなたがどのように感じているかを正確に知っています. だからここにあります:

`ALTER TABLE  `table_name` CHANGE `column_name` DATETIME NOT NULL DEFAULT 0

0の周りに一重引用符/二重引用符を追加していないことに注意してください。


重要な更新:

この回答はずっと前に投稿されました。当時、MySQL の (おそらく最新の) インストールで動作し、それを共有したいと思いました。このソリューションを今すぐ使用する前に、以下のコメントをお読みください。

于 2011-06-22T17:35:24.167 に答える
1
`ALTER TABLE  `table_name` CHANGE `column_name` 
    timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 
    ON UPDATE CURRENT_TIMESTAMP

更新時にタイムスタンプを更新するために使用できます。

于 2013-05-07T14:06:47.120 に答える
-1

これがまだアクティブかどうかはわかりませんが、ここに行きます。

デフォルトを Now() に設定することに関しては、DATETIME データ型でそれが可能であるとは思えません。そのデータ型を使用する場合は、次のように挿入を実行するときに日付を設定します。

INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', (select now()))

mySQL のバージョンは 5.5 です

于 2011-11-25T23:54:22.103 に答える