web-dev-qa-db-ja.com

mysqlテーブルの列のデフォルトを変更するにはどうすればよいですか?

タイプがtimestampで、デフォルトがcurrent_timestampで、更新のたびにcurrent_timestampに更新される列を持つテーブルがあります。

この列の「更新時」機能を削除したい。 alter文はどのように書きますか?

私は次を試しました:

ALTER TABLE mytable alter column time  set DEFAULT now();

しかし、これはうまくいきませんでした。

54
Tihom

ピートはほぼ正しかったが、「変更」に間違った構文を使用した。

ALTER TABLE mytable CHANGE `time` `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

列名を繰り返す必要があることに注意してください。また、列名timeをエスケープするために、一重引用符ではなくバックティックを使用していることを確認してください。これにより、mysql列タイプの時間として解釈されなくなります。

CURRENT_TIMESTAMPのDEFAULTを指定すると、MySQLは列を自動的に更新しなくなります。 MySQL Manual から:

DEFAULT CURRENT_TIMESTAMP句があり、ON UPDATE句がない場合、列にはデフォルト値の現在のタイムスタンプがありますが、自動的には更新されません。

83
jonstjohn

NOW()などの関数をデフォルトとして使用することはできません。

試して

ALTER TABLE `mytable` CHANGE `time` `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

(フィールド名のエスケープと2番目の使用を追加するために編集)

11
Pete