web-dev-qa-db-ja.com

MySQLは各行の日時を自動保存します

MySQLでは、データベースにあるすべてのテーブルに_dt_created_および_dt_modified_(それぞれ作成および最終変更の日時スタンプ)列を追加するのはうんざりです。

データベースをINSERTまたはUPDATEするたびに、NOW()キーワードを使用する必要があります。これは私の粘り強さ全体に及んでいます。

MySQLが少なくとも挿入された行のデータ時間を自動的に保存し、それを取得できる効率的な代替手段はありますか?

43
mauris

DEFAULT制約を使用して、タイムスタンプを設定できます。

_ALTER TABLE
 MODIFY dt_created datetime DEFAULT CURRENT_TIMESTAMP

ALTER TABLE
 MODIFY dt_modified datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
_

INSERT/UPDATEステートメントでNOW()を指定する必要はありません。

参照: TIMESTAMPプロパティ

79
OMG Ponies

phpmyadminを使用している場合、これを行うには:

enter image description here

11
Ouadie
ALTER TABLE  `tablename` CHANGE  `dt`  `dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

正しいコードである必要があります。

9
Kim Stacks

まあ、あなたは両方を持つことはできません:

mysql doc:

現在のタイムスタンプを1つの列のデフォルト値にし、別の列の自動更新値にすることはできません。

悲しいですね。

ただし、now()の代わりにnullを使用できます このヒントに従って

3
ggd

同様の質問がここで尋ねられました " Timestamp for MySQL "タイムスタンプフィールドはアクセスされるたびに更新されます。また、問題のテーブルに Trigger を配置して、これらのフィールドを自動的に設定することを検討することもできます。環境によっては、一部のショップ/ビジネスはトリガーの使用を好まないため、代替の回避策を見つける必要がある場合があります。

1
GrayWizardx

Phpmyadminで設定できます enter image description here

または、このクエリを使用します

ALTER TABLE  `tablename`
    CHANGE  `dt_created`  `dt_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
0
user3110005