レコードが作成された時刻と最後に更新された時刻を格納するテーブルをいくつか作成しています。 1つは値CURRENT_TIMESTAMP
を持ち、もう1つはCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
を持つ2つのタイムスタンプフィールドを持つことができると思いました。しかし、テーブルにはデフォルト値を持つタイムスタンプフィールドが1つしかないため、これを行うことはできないと思いますか?
2回入手して保管することをどのように勧めますか?ありがとう!
1つのテーブルにタイムスタンプタイプの2つの列を含めることができます。
以下はMySQL5.0で機能します
[.________________ ]
これをSQLServerと混同していると思います(タイムスタンプは実際には「タイムスタンプ」ではなく、実際には1つの「タイムスタンプ」列に制限があります)
編集:ただし、行が変更されるたびにupdate_at列を更新するトリガーが必要になります。
'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/
MYSQLバージョン5.6.5以降、DEFAULTおよびONUPDATEを使用してこれを行うことができます。トリガーは必要ありません。
ts_create
TIMESTAMP DEFAULT CURRENT_TIMESTAMP、
ts_update
TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
私の知る限り、その制限に対する回避策はありません。タイムスタンプの1つを(少なくとも)手動で設定する必要があります。最も簡単な方法は、updated = NOW()
をUPDATE
- queryに追加することです。
CREATE_TIMEとUPDATE_TIMEの2つの列が必要です。
CREATE_USERとUPDATE_USERを追加することをお勧めします。
おそらく、列の名前が変更され、古い値と新しい値で1:manyの関係が必要になるでしょう。
それはすべて変更データキャプチャの一部です。トリガーを使用して更新されるCDCテーブルを持つことができます。
現在のタイムスタンプを提案したとおりに残し、created_atフィールドに現在の日付を挿入時に入力します。