2011-11-19 6 views
46

SEE:Update timestamp column in Application or Database?MySQL Workbench: "ON UPDATE"を設定する方法は?とCURRENT_TIMESTAMP?

私はベンチに似た何かをモデル化しようとしているが、私はここで、「ON UPDATE」の部分を設定する方法がわかりません。私が得ることができる最高のものは次のとおりです:

-- ----------------------------------------------------- 
-- Table `foo`.`test` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `foo`.`test` ; 

CREATE TABLE IF NOT EXISTS `foo`.`test` (
    `test_id` INT NOT NULL , 
    `date_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , 
    `date_updated` TIMESTAMP NOT NULL DEFAULT 0 , 
    PRIMARY KEY (`test_id`)) 
ENGINE = InnoDB; 

このON UPDATE部分を設定するにはどこに行きますか?

また、データベースに保存されているすべてのタイムスタンプはUTCでなければならないというルールがあります。 CURRENT_TIMESTAMP、NOWなどをUTCにするにはどうすればよいですか?

+0

ON CURRENT_TIMESTAMP、私は、[ワークベンチスクリプト](HTTPSを作成しました。 com/pepijnolivier/61ba3d69af2884ef2d6fa107d657e2d5)は、すべてのテーブルにタイムスタンプの列を自動的に追加します(ピボットテーブル以外は –

答えて

91

私はMySQL Workbench 5.2.35を使用しています。作成/変更テーブルパネルを開き、列タブに切り替え、タイムスタンプフィールドを右クリックします。可能な場合はdefaulton updateのオプションが表示されます。

重要:CURRENT_TIMESTAMPは、テーブルの1つの列に対してのみデフォルト値または更新値として使用できます。 UTCの質問について

Sample screenshot showing the context menu

、あなたはこのquestionを見てすることができます。そこには容認された解決策があります。

Timestamp data typeNOW() functionのMySQLリファレンスマニュアルもお読みになることをお勧めします。

+0

)。レコードがソフト削除されたときを知りたければ、date_deletedを作成し、それをアプリケーションレイヤーから設定します。また、UTCの問題についての考え方はありますか? – StackOverflowNewbie

+0

はい、アイテムをソフト削除済みとしてマークするクエリを既に実行している場合は、同じクエリ内(または少なくとも同じトランザクション内)でアプリケーションレイヤから日付を更新する方がよいでしょう。私はUTCの問題の答えを更新しました。 – melihcelik

+0

複数のフィールドで実行できますか? – carbonr

-1

デフォルトでは、MySQLはUPDATEまたはINSERTステートメントごとに、CURRENT_TIMESTAMPの最初のフィールドをに設定します。 updated_atが最初にtimestampフィールドになるようにスキーマを設計するので、明示的に指定する必要はありません。 TIMESTAMP デフォルト:ここで

3

は、私は、MySQLのワークベンチ

データ型で何をすべきかです//gist.github:興味がある人々のためにUPDATE CURRENT_TIMESTAMP

関連する問題