mysql複数のTimeStationの設置方法の解読

3009 ワード

timestamp設定のデフォルト値はDefault CURRENT_です。TIMESTAMP timestamp設定は表の変化に伴い自動更新されます。TIMESTAMPですが、一つの表の中には一つのフィールドしかないので、CURRENT_をセットできます。TIMESTAMP 2行でDEFAULT CURRENT_を設定します。TIMESTAMPはだめです。もう一つ注意したいのですが、
 
CREATE TABLE `device` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`toid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'toid',
`createtime` TIMESTAMP NOT NULL COMMENT ' ',
`updatetime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ' ',
PRIMARY KEY (`id`),
UNIQUE INDEX `toid` (`toid`)
)
COMMENT=' '
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
はこのような設定ではいけません。理由はmysqlがデフォルトで表の最初のtimestampフィールド(そしてNOT NULLが設定されています)になります。DEFAULAT CURRENT_。TIMESTAMP。したがって、上記のような設定は、実際には二つのCURRENT_を設置したものと同じです。TIMESTAMP分析需要の一つの表には、二つのフィールドがあります。createtimeとudatetime。1 insertの場合、sql二つのフィールドは設定されていません。現在の時間に設定されます。udateの場合、sqlの中の二つのフィールドは設定されていません。udatetimeは現在の時間に変更されます。このような要求はできません。二つのフィールドにCURRENT_をセットすることは避けられないからです。TIMESTAMPの解決方法はいくつかあります。1トリガーを使ってinsertとudateの時にトリガーのトリガ時間を設定します。インターネットでこの方法を使う人がいます。もちろんこの方法の利用可能性は疑わない。しかし実際のシーンにとっては、小さな問題を解決するための複雑さが増しているに違いない。2最初のtimestampのdefaultを0テーブル構造に設定します。
 
CREATE TABLE `device` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`toid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'toid',
`createtime` TIMESTAMP NOT NULL DEFAULT 0 COMMENT ' ',
`updatetime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ' ',
PRIMARY KEY (`id`),
UNIQUE INDEX `toid` (`toid`)
)
COMMENT=' '
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
です。このようにすると、必要な挿入と更新操作は、insert into device set toid=11、createtime=nullになります。udate device set toid=22 where id=1;ここで注意するのは挿入操作のcreatetimeはnullに設定しなければなりません。私もこの方法は不快だと思いますが、insert操作を少し修正するだけでsql文のマイナスになります。価値があると思います。これは確かにデータベースを修正して最小でまた需要を保証する方法です。もちろんこの方法も1つの方法と同時に使えるので、トリガーの数を減らす効果があります。3おとなしくて、実はタイムスタンプを使っています。これは一番多くの人が一番よく選んでいるテーブル構造で、あまり設計をしないです。
 
CREATE TABLE `device` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`toid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'toid',
`createtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ' ',
`updatetime` TIMESTAMP NOT NULL COMMENT ' ',
PRIMARY KEY (`id`),
UNIQUE INDEX `toid` (`toid`)
)
COMMENT=' '
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
このように、挿入とアップデートの操作の時に具体的なタイムスタンプを書き込む必要があります。insert device set toid=11、createtime='2012-1-10:10'、udatetime='2012-1-2 10:10'udate device set toid=22、udatetime='2012-1-2 10:10'where id=1実は、このようにするメリットも一つあります。timestampはmysql特有のもので、データベースがmysqlから他のデータベースに移った時、業務ロジックコードは修正しなくてもいいです。ps:この3つの方法の取捨選択は完全にあなたの考え次第です。ちなみに、最後に第三の方法を選びます。