web-dev-qa-db-ja.com

MySQLの作成時間と更新時間のタイムスタンプ

レコードが作成された時刻と最後に更新された時刻を格納するテーブルをいくつか作成しています。 1つは値CURRENT_TIMESTAMPを持ち、もう1つはCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMPを持つ2つのタイムスタンプフィールドを持つことができると思いました。しかし、テーブルにはデフォルト値を持つタイムスタンプフィールドが1つしかないため、これを行うことはできないと思いますか?

2回入手して保管することをどのように勧めますか?ありがとう!

14
Aishwar

1つのテーブルにタイムスタンプタイプの2つの列を含めることができます。

以下はMySQL5.0で機能します

[.________________ ]

これをSQLServerと混同していると思います(タイムスタンプは実際には「タイムスタンプ」ではなく、実際には1つの「タイムスタンプ」列に制限があります)

編集:ただし、行が変更されるたびにupdate_at列を更新するトリガーが必要になります。

11

'created'や 'updated'のようなフィールドを作成する良い方法は

CREATE TABLE `mytable` ( 
`id` INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, 
`created` TIMESTAMP DEFAULT '0000-00-00 00:00:00', 
`updated` TIMESTAMP DEFAULT now() ON UPDATE now(),
`myfield` VARCHAR(255)
); 

そして、「挿入」中に両方の列にnullを入力する必要があります。

INSERT INTO mytable (created,updated,myfield) VALUES (null,null,'blablabla');

そして今、すべての更新で、「更新された」フィールドは実際の日付で新しい値を持ちます。

UPDATE mytable SET myfield='blablablablu' WHERE myfield='blablabla';

ソース: http://gusiev.com/2009/04/update-and-create-timestamps-with-mysql/

28
albert

MYSQLバージョン5.6.5以降、DEFAULTおよびONUPDATEを使用してこれを行うことができます。トリガーは必要ありません。

ts_create TIMESTAMP DEFAULT CURRENT_TIMESTAMP、

ts_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

19
Dimitry

私の知る限り、その制限に対する回避策はありません。タイムスタンプの1つを(少なくとも)手動で設定する必要があります。最も簡単な方法は、updated = NOW()UPDATE- queryに追加することです。

2
Guido Hendriks

CREATE_TIMEとUPDATE_TIMEの2つの列が必要です。

CREATE_USERとUPDATE_USERを追加することをお勧めします。

おそらく、列の名前が変更され、古い値と新しい値で1:manyの関係が必要になるでしょう。

それはすべて変更データキャプチャの一部です。トリガーを使用して更新されるCDCテーブルを持つことができます。

0
duffymo

現在のタイムスタンプを提案したとおりに残し、created_atフィールドに現在の日付を挿入時に入力します。

0
silvo