10bet网址
MySQL 5.6リファレンスマニュアル
本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb
HTML下载(TGZ)- 7.2 mb
HTML下载(邮政编码)- 7.2 mb


MySQL 5.6リファレンスマニュアル/.../ 时间戳およびdatetimeの自動初期化および更新機能

11.3.5 timestampおよびdatetimeの自動初期化および更新機能

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_DATESQLモドが有効な場合には機能しません。このモドではゼロの日付値(たとえば.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の場合,壹空间非空であり,これにの値を割り当てると、現在のタ以及ムスタンプに設定されます。t2t3の場合,壹空间ではを使用でき,これにの値を割り当てると,に設定されます。

  • t2t3では,壹空间のデフォルト値が異なります。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);