1. ホーム
  2. mysql

[解決済み] タイムスタンプ(自動)はいつ更新されるのですか?

2023-03-19 07:22:49

質問

テーブルのカラムが TIMESTAMP 型のテーブルにカラムがあり、デフォルトで CURRENT_TIMESTAMP の値を更新すると、このカラムは現在のタイムスタンプに更新されるのでしょうか? の値を更新した場合、このカラムは現在のタイムスタンプに更新されるのでしょうか? の値を更新した場合、このカラムは現在のタイムスタンプに更新されますか? の値を更新した場合、このカラムは現在のタイムスタンプに更新されますか?

しないようなのですが、こうなるべきなのかよくわかりません。

これが何を意味するのか理解できません( MySQL ドキュメントから ):

<ブロッククオート

カラムが自動更新の場合、行の他のカラムの値が更新されると、自動的に現在のタイムスタンプに更新されます。 行の他のカラムの値が現在の値から変更されると、自動的に現在のタイムスタンプに更新されます。 現在の値から変更された場合、自動的に現在のタイムスタンプに更新されます。他のすべてのカラムが現在の値に設定されている場合、カラムは変更されないままです。 他のカラムが現在の値に設定されている場合、カラムは変更されません。他のカラムが変更されたときにカラム 他のカラムが変更されたときにカラムが更新されないようにするには、明示的にそのカラムを現在の値に設定します。 を現在の値に設定します。他のカラムが変更されない場合でも、カラムを更新するには 明示的にそのカラムが持つべき値を設定します。] 2

どのように解決するのですか?

コマンド SHOW CREATE TABLE whatever

次に テーブルの定義を見てみましょう。 .

おそらく次のような行があるはずです。

logtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

の中に DEFAULT CURRENT_TIMESTAMP は、任意の INSERT は現在の時刻を使うということです。 同様に ON UPDATE CURRENT_TIMESTAMP は、タイムスタンプを明示的に指定しない更新は、現在のタイムスタンプ値への更新になることを意味します。

テーブルを作成する際に、このデフォルトの挙動を制御することができます。

あるいは、タイムスタンプ列がそもそも正しく作成されていない場合は、それを変更することができます。

ALTER TABLE whatevertable
     CHANGE whatevercolumn 
            whatevercolumn TIMESTAMP NOT NULL
                           DEFAULT CURRENT_TIMESTAMP 
                           ON UPDATE CURRENT_TIMESTAMP;

これにより、テーブルに対するINSERTとUPDATEの両方の操作で、タイムスタンプ・カラムが自動的に更新されるようになります。 もしあなたが whatevertable をタイムスタンプを変更せずに更新したい場合、です。

他のカラムが変更されたときにカラムが更新されないようにするために

の場合、このような更新を発行する必要があります。

UPDATE whatevertable
   SET something = 'newvalue',
       whatevercolumn = whatevercolumn
 WHERE someindex = 'indexvalue'

これは TIMESTAMPDATETIME カラムを使用します。(MySQL バージョン 5.6.5 以前では、この機能は TIMESTAMP のみ動作しました。 TIMESTAMP 正しく設定されたサーバマシンでは、これらの値は常に UTC で保存され、取得時にローカルタイムに変換されます。