2017-12-07 6 views
1

、私は私のMySQLサーバ上で次のクエリを実行行うには、それを言われたことがないとはいえ、デフォルトを設定します。MySQLは、「更新時に」使用して、私はそう

CREATE TABLE user(
    created_at timestamp NOT NULL, 
    updated_at timestamp NOT NULL, 
    id integer NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    count integer NOT NULL, 
    name varchar(50) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci 

私が驚いたのphpMyAdminに見えたとき。 created_atの列のデフォルト値はCURRENT_TIMESTAMPで、ON UPDATE CURRENT_TIMESTAMPに設定されています。

どうすればこのことが起こりますか? それはそうすべきではないでしょうか?

答えて

0

この動作は、私には驚くべきことであるが、それは実際にdocumentationで説明されています。

テーブル内の任意のTIMESTAMPまたはDATETIME列の場合、デフォルト値として 現在のタイムスタンプを割り当てることができ、自動-update値、またはその両方 :自動初期化カラムをカラムに値を指定しない挿入行の現在のタイムスタンプに設定されている

  • 行の他の列の値が現在の値から変更された場合、自動更新列は現在のタイムスタンプに自動的に更新されます。 他のすべての列が現在の値に設定されている場合、自動更新列は変更されません。他の列が変更されたときに 自動更新列が更新されないようにするには、 を明示的に現在の値に設定します。自動更新された 列を更新するには、他の列が変更されない場合でも、明示的に値を に設定します(たとえば、CURRENT_TIMESTAMPに設定します)。

+0

ので、フォローアップの質問です:なぜこれが唯一のcreated_at' 'に起こると' updated_at'しませんか?そして、いつcoloumnが 'auto-initialized'と' auto-updated'として認識されますか?これまでにありがとうございました:) – Fuzzyma

+1

は**最初のように見えます** TIMESTAMPは自動的にそのように設定されています。 "これは、現在のタイムスタンプに自動的に初期化または更新されるテーブルの最初のTIMESTAMP列である必要はありませんが、別のTIMESTAMP列の自動初期化または更新を指定するには、最初の列の自動プロパティを抑制する必要があります。 https://dev.mysql.com/doc/refman/5.5/en/timestamp-initialization.html –

関連する問題