MySQL 5.6.5以降では,时间戳
およびDATETIME
カラムを自動的に初期化でき,現在の日付および時間(つまり,現在のタイムスタンプ)に自動的に更新できます.5.6.5より前では,これは时间戳
にしか当てはまらず,テブルあたり最大で1时间戳
カラムにしか当てはまりません。次の注意事項では,最初に,MySQL 5.6.5以降での自動初期化および更新機能について,次に5.6.5より前のバージョンでの相違点について説明します。
テブル内のあらゆる时间戳
またはDATETIME
カラムに対して,デフォルト値または自動更新値,あるいはその両方として,現在のタイムスタンプを割り当てることができます。
自動初期化されたカラムは、カラムに値を指定しない挿入行に対して現在のタ以及ムスタンプに設定されます。
自動更新されたカラムは,行内のほかのカラムの値がその現在の値から変更されると,現在のタイムスタンプに自動的に更新されます。自動更新されたカラムは,ほかのすべてのカラムがその現在の値に設定されていれば,変更されないまま保持されます。ほかのカラムが変更したときに,自動更新したカラムが更新しないようにするには,明示的にこれを現在の値に設定します。ほかのカラムが変更しない場合でも,自動更新カラムを更新するには,明示的にこれを必要な値に設定します(たとえば
CURRENT_TIMESTAMP
に設定します)。
さらに,零
属性を使用して零
値を許可するように定義されていないかぎり,零
値を割り当てることによって,すべての时间戳
カラムを初期化したり,現在の日付と時間に更新したりできます。
自動プロパティを指定するには,カラム定義で默认CURRENT_TIMESTAMP
および在更新CURRENT_TIMESTAMP
句を使用します。句の順序は関係ありません。両方がカラム定義にある場合,どらも最初に実行できます。CURRENT_TIMESTAMP
のシノニムのいずれも,CURRENT_TIMESTAMP
と同じ意味があります。これらは,CURRENT_TIMESTAMP ()
、现在()
、本地时间
、作用是()
、LOCALTIMESTAMP
,およびLOCALTIMESTAMP ()
です。
默认CURRENT_TIMESTAMP
および在更新CURRENT_TIMESTAMP
の使用は,时间戳
およびDATETIME
に固有です。默认的
句も,默认值0
や默认的2000-01-01就是
などの一定(非自動)のデフォルト値を指定するために使用できます。
默认值0
を使用した次の例は,NO_ZERO_DATE
SQLモドが有効な場合には機能しません。このモドでは「ゼロ」の日付値(たとえば.0
“0000-00-00”就是
として指定)が拒否されるからです。传统的
SQLモドにNO_ZERO_DATE
が含まれています。
时间戳
またはDATETIME
カラム定義では,現在のタイムスタンプをデフォルト値と自動更新値の両方に対して指定することも,どちらか一方について指定することも,両方について指定しないこともできます。異なるカラムは,自動プロパティ。次のルルは可能性のある場合にいて記述しています。
默认CURRENT_TIMESTAMP
と在更新CURRENT_TIMESTAMP
の両方を使用した場合,カラムは,デフォルト値が現在のタイムスタンプになり,現在のタイムスタンプに自動的に更新されます。创建表t1 (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
默认的
句を使用するが在更新CURRENT_TIMESTAMP
句を使用しない場合,カラムには所定のデフォルト値が設定され,現在のタイムスタンプに自動的に更新されません。デフォルトは,
默认的
句でCURRENT_TIMESTAMP
を指定するか定数値を指定するかに応じて異なります。CURRENT_TIMESTAMP
を使用した場合、デフォルトは現在のタ以及ムスタンプになります。创建表t1 (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP, dt DATETIME DEFAULT CURRENT_TIMESTAMP);
定数を使用した場合,デフォルトは所定の値になります。この場合,カラムには自動的なプロパティはありません。
CREATE TABLE t1 (ts TIMESTAMP DEFAULT 0, dt DATETIME DEFAULT 0);
在更新CURRENT_TIMESTAMP
句と定数の默认的
句を使用した場合,カラムは,現在のタイムスタンプに自動的に更新され,所定の定数のデフォルト値があります。创建表t1 (ts时间戳默认值为0,dt时间戳默认值为0);
在更新CURRENT_TIMESTAMP
句を使用するが默认的
句を使用しない場合,カラムは,自動的に現在のタイムスタンプに更新され,そのデフォルト値に現在のタイムスタンプは使用されません。この場合のデフォルトは型により異なります。
时间戳
は,零
属性を使用して定義されていないかぎり(この場合はデフォルトは.零
です),デフォルトは0です。创建表t1 (ts1 TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,——default 0 ts2 TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP——default NULL);
DATETIME
は,非空
属性で定義されていないかぎり(この場合,デフォルトは0です),デフォルトは零
です。CREATE表t1 (dt1 DATETIME ON UPDATE CURRENT_TIMESTAMP,——default NULL);
时间戳
およびDATETIME
カラムには,明示的に指定されないかぎり自動プロパティはありません。ただし,默认CURRENT_TIMESTAMP
と在更新CURRENT_TIMESTAMP
がどらも明示的に指定されていない場合は,デフォルトで最初の时间戳
カラムに両方とも存在します。最初の时间戳
カラムにいて自動プロパティを抑制するには,次のいずれかの戦略を使用します。
explicit_defaults_for_timestamp
システム変数を有効にします。この変数が有効な場合,自動初期化および更新機能を指定する默认CURRENT_TIMESTAMP
および在更新CURRENT_TIMESTAMP
句は使用可能ですが,カラム定義に明示的に含まれていないかぎり,どの时间戳
カラムにも割り当てられません。または,
explicit_defaults_for_timestamp
が無効な場合(デフォルト),次のどらかを行います。定数のデフォルト値を指定する
默认的
句を含むカラムを定義します。零
属性を指定します。またこれにより,カラムで零
値が許可されます。まり,カラムを零
に設定することによって現在のタ邮箱ムスタンプを割り当てることができなくなります。零
を割り当てると,カラムは零
に設定されます。
次のテブル定義を考慮してください。
CREATE表t1 (ts1 TIMESTAMP DEFAULT 0, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);创建表t2 (ts1 TIMESTAMP NULL, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);CREATE TABLE t3 (ts1 TIMESTAMP NULL DEFAULT 0, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
テブルには次のプロパティがあります。
各テブル定義において,最初の
时间戳
カラムには,自動初期化または更新機能はありません。各テブルでは,
壹空间
カラムで零
値を処理する方法が異なります。t1
の場合,壹空间
は非空
であり,これに零
の値を割り当てると、現在のタ以及ムスタンプに設定されます。t2
とt3
の場合,壹空间
では零
を使用でき,これに零
の値を割り当てると,零
に設定されます。t2
とt3
では,壹空间
のデフォルト値が異なります。t2
の場合,壹空间
は,零
を許可するように定義されているので,明示的な默认的
句がない場合はデフォルトも零
です。t3
の場合,壹空间
は零
を使用できますが,明示的なデフォルトは0です。
时间戳
またはDATETIME
カラム定義のいずれかの場所に明示的な小数秒精度値が含まれる場合,カラム定義全体で同じ値を使用する必要があります。次の場合は許可されます。
CREATE TABLE t1 (ts TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6));
次の場合は許可されません。
CREATE TABLE t1 (ts TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(3));
MySQL 5.6.5より前の自動タeconf econfムスタンププロパティ
MySQL 5.6.5より前では,自動初期化および更新機能のサポトは非常に限定的です。
默认CURRENT_TIMESTAMP
と在更新CURRENT_TIMESTAMP
は,DATETIME
カラムで使用できません。默认CURRENT_TIMESTAMP
と在更新CURRENT_TIMESTAMP
は,テブルあたり最大で1时间戳
カラムでしか使用できません。現在のタ,ムスタンプを,あるカラムのデフォルト値にして,別のカラムの自動更新値にはできません。
これらのプロパティを使用するかどうか,どの时间戳
カラムで必要になるかを選択できます。これは,自動的に初期化される,または現在のタイムスタンプに自動的に更新されるテーブル内の最初のカラムにする必要はありません。別の时间戳
カラムに対して自動初期化または更新を指定するには,前述のように,最初のカラムに対する自動プロパティーを制約する必要があります。この場合,ほかの时间戳
カラムでは,默认的
および在更新
句のルルは,最初の时间戳
カラムの場合と同じですが,両方の句を省略した場合,自動初期化も更新も行われません。
时间戳の初期化とnull属性
デフォルトでは,时间戳
カラムは非空
であり,零
値を含めることはできず,零
を割り当てると現在のタ邮箱ムスタンプが割り当てられます。零
を含めるように时间戳
カラムを許可するには,零
属性で明示的に宣言します。この場合,別のデフォルト値を指定する默认的
句でオバラドされないかぎり,デフォルト値も零
になります。默认为空
を使用すると,デフォルト値として零
を明示的に指定できます。(零
属性が宣言されていない时间戳
カラムの場合,默认为空
は無効です。)时间戳
カラムで零
値を許可する場合,零
を割り当てると、このカラムは現在のタ以及ムスタンプではなく零
に設定されます。
次のテブルには,零
値を許可している複数の时间戳
カラムが含まれています。
CREATE表t (ts1 TIMESTAMP NULL DEFAULT NULL, ts2 TIMESTAMP NULL DEFAULT 0, ts3 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP);
零
値を許可する时间戳
カラムは,次のいずれかの状況に当てはまる場合を除き,挿入時に現在のタ,ムスタンプを取りません。
デフォルト値が
CURRENT_TIMESTAMP
と定義され,カラムに対して値が指定されていないCURRENT_TIMESTAMP
,または现在()
などのそのいずれかのシノニムが明示的にカラムに挿入されている
まり,零
値を許可するように定義されている时间戳
カラムは,その定義に默认CURRENT_TIMESTAMP
が含まれている場合にのみ自動初期化します。
CREATE TABLE t (ts TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP);
时间戳
カラムで零
値を許可しているが,定義に默认CURRENT_TIMESTAMP
が含まれていない場合,現在の日付と時間に対応する値を明示的に挿入する必要があります。t1
およびt2
テブルに次の定義があるとします。
CREATE TABLE t1 (ts TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00');CREATE TABLE t2 (ts TIMESTAMP NULL);
挿入時にどらかのテブルの时间戳
カラムを現在のタムスタンプに設定するには,明示的にそのカラムにこの値を割り当てます。例:
INSERT INTO t1 VALUES (NOW());INSERT INTO t2 VALUES (CURRENT_TIMESTAMP);