mysql timestamp自己更新

3072 ワード

コードクリップは次のとおりです.
CREATE TABLE `test` (
  `t1` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `ww` varchar(5) NOT NULL
) ENGINE=MyISAM ;
実際には、次の2つのテーブル文の効果は同じです.以下はコードクリップです.
CREATE TABLE `test` (
`t1` TIMESTAMP NOT NULL ,
`ww` VARCHAR( 5 ) NOT NULL
) ENGINE = MYISAMCREATE TABLE `test` (
  `t1` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `ww` varchar(5) NOT NULL
) ENGINE=MyISAM ;
 
比較すると、私の文は「on update CURRENT_TIMESTAMP」が少なくなったり、「default CURRENT_TIMESTAMP」が多くなったりします.これにより、このtimestampフィールドは、データinsertの作成時間だけであり、updateでは変化しません.もちろん、あなたがこの目的を達成したいならどうでもいいです.
英語のマニュアルを検索(http://dev.mysql.com/doc/refman/5.1/en/timestamp.html)、より詳細な解説が得られ、以下のように翻訳された.
——————————————————————————————————
CREATE TABLE文では、1番目のTIMESTAMP列は、次のいずれかの方法で宣言できます.
1:定義時にDEFAULT CURRENT_TIMESTAMPとON UPDATE CURRENT_TIMESTAMP句には、デフォルトで現在のタイムスタンプが使用され、自動的に更新されます.
2:DEFAULTまたはON UPDATE句を使用しない場合は、DEFAULT CURRENT_と同等です.TIMESTAMP ON UPDATE CURRENT_TIMESTAMP.
3:DEFAULT CURRENTのみの場合TIMESTAMP句、ON UPDATE句なし、列の値は現在のタイムスタンプであるが自動的に更新されないのがデフォルトです.
4:DEFAULT句を使わない場合、ON UPDATE CURRENT_がありますTIMESTAMP句、列黙は0と思って自動的に更新します.
5:定数DEFAULTがある場合、列にはデフォルト値があり、現在のタイムスタンプに自動的に初期化されません.列にON UPDATE CURRENT_がある場合TIMESTAMP句、このタイムスタンプは自動的に更新されます.そうしないと、この列にはデフォルトの定数がありますが、自動的に更新されません.
すなわち、現在のタイムスタンプを使用して値を初期化したり、自動的に更新したり、そのうちの1つを使用したりすることができます.(たとえば、定義時に自動更新を指定できますが、初期化されません).次のフィールド定義では、次のことを説明します.
コードクリップは次のとおりです.
自動初期化と更新:
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMPは自動初期化のみ:
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMPは自動更新のみ
ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP
定数を1つだけ与えます(注意:000-00-00 00 00:00:00)
ts TIMESTAMP DEFAULT 0
——————————————————————————————————
「1番目のTIMESTAMP列」と赤いフォントで表記しましたが、1つのテーブルに複数のtimestamp列があると定義が異なるためです.たとえば、上記の2番目の項目は、「DEFAULTまたはON UPDATE句を使用しない場合、DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMPと同等です.」2番目のtimestamp列であれば違います.
CREATE TABLE `test` (
`ww` VARCHAR( 9 ) NOT NULL ,
`t1` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`t2` TIMESTAMP NOT NULL
) ENGINE = MYISAM
この場合、データ挿入時に、t 1は現在時刻を記録し、t 2はデフォルト値(000-00-00 00 00:00:00)であり、次の文と同じである.
CREATE TABLE  `test` (
`ww` VARCHAR( 9 ) NOT NULL ,
`t1` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`t2` TIMESTAMP NOT NULL DEFAULT ‘0000-00-00 00:00:00′
) ENGINE = MYISAM
上の第2条によると、
CREATE TABLE `test` (
`ww` VARCHAR( 9 ) NOT NULL ,
`t1` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`t2` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE = MYISAM
しかし、実際には、上記の文は構文エラーであり、mysqlは次のように返します.
#1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
 
私はこのように1つのテーブルを設計したいと思っていました.このテーブルには2つのtimestamp列があり、1つは更新時間を記録することができ、1つは初期時間を記録することができますが、何度も試した後、mysqlはできないようです.これがmysqlの欠陥であることを知らないのは自己最適化です.この機能はdatetimeを使用して記録初期化の時間を実現することができるからです.ただinsertが必要なときに指定します.