2

重複の可能性:
MySQL CURRENT_TIMESTAMP を DEFAULT として

次のようにテーブルを作成しようとしています

CREATE TABLE myTable1 
(
 id INT,
 date_validated TIMESTAMP,
 date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

しかし、それは機能していません。次のようにエラーが発生します

Incorrect table definition; there can be only one TIMESTAMP column 
with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

(以下に示すように) 2 つのタイムスタンプ ステートメントを切り替えると、機能します。

CREATE TABLE myTable1 
(
 id INT,
 date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
 date_validated TIMESTAMP
);

なぜこれが起こっているのですか?

これは私にとって奇妙なことであり、そのような問題を経験したことはありません。

クエリをチェックするための sqlfiddle デモ

4

1 に答える 1

3

TIMESTAMP は実際には DATETIMEに似ていますが、宣言した最初の TIMESTAMP は自動的に初期化されます。

http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html

そのため、最初に属性なしで TIMESTAMP を書き込むと、MySQL は内部で「DEFAULT CURRENT_TIMESTAMP」を追加して変換します。MySQL が CURRENT_TIMESTAMP を明示的に設定した 2 番目の TIMESTAMP に遭遇すると、競合が発生します。

ただし、最初の行で CURRENT_TIMESTAMP を定義すると冗長になります。2 番目の行には何も指定しないため、2 番目の行にはデフォルトが割り当てられず、競合することはありません。

上記のリンクから、「現在のタイムスタンプに自動的に初期化または更新されるテーブルの最初の TIMESTAMP 列である必要はありません。ただし、別の TIMESTAMP 列の自動初期化または更新を指定するには、その自動プロパティを抑制する必要があります。最初の1つ。"

于 2012-07-09T18:12:23.767 に答える