タイプTIMESTAMP
のテーブルに列があり、デフォルトである場合:anyotherの値を更新すると、この列は現在のタイムスタンプに更新されます。同じ行の列?
そうではないようですが、これが起こるべきかどうかはわかりません。
これが何を意味するのか理解できません( MySQLドキュメントから ):
列が自動更新される場合、行の他の列の値が現在の値から変更されると、列は現在のタイムスタンプに自動的に更新されます。他のすべての列が現在の値に設定されている場合、列は変更されません。他の列が変更されたときに列が更新されないようにするには、明示的に現在の値に設定します。他の列が変更されていない場合でも列を更新するには、その値を明示的に設定してください] 2
コマンドSHOW CREATE TABLE whatever
を与えます
次に table definition を見てください。
おそらくこのような行があります
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'
また、これはTIMESTAMP
列でのみ機能し、DATETIME
列またはDATE
列では機能しません。列はTIMESTAMP
sであるため、タイムゾーンが考慮されます。正しく構成されたサーバーマシンでは、これらの値は常にUTCに格納され、取得時に現地時間に変換されます。
このようにタイムスタンプ列を定義する必要があると思います
CREATE TABLE t1 ( ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP UPDATE CURRENT_TIMESTAMP );
こちら をご覧ください
データベースにトリガーを追加します。
DELIMITER //
CREATE TRIGGER update_user_password
BEFORE UPDATE ON users
FOR EACH ROW
BEGIN
IF OLD.password <> NEW.password THEN
SET NEW.password_changed_on = NOW();
END IF;
END //
DELIMITER ;
パスワード変更時刻は、パスワード列が変更されたときにのみ更新されます。
自動更新された列は、行の他の列の値が現在の値から変更されると、現在のタイムスタンプに自動的に更新されます。他のすべての列が現在の値に設定されている場合、自動更新された列は変更されません。
それを説明するために、1行しかないことを想像してみましょう。
-------------------------------
| price | updated_at |
-------------------------------
| 2 | 2018-02-26 16:16:17 |
-------------------------------
ここで、次の更新列を実行すると:
update my_table
set price = 2
価格の値は実際には変更されていないため(すでに2だったため)、updated_atの値は変更されません。
ただし、2以外の価格の値を持つ別の行がある場合、その行のupdated_at値(価格<> 3)はCURRENT_TIMESTAMPに更新されます。
新しい人にとってこれは混乱であるため、UPDATE CURRENT_TIMESTAMP
の場所を追加します。
ほとんどの人はphpmyadminなどを使用します。
選択したデフォルト値CURRENT_TIMESTAMP
属性(異なるドロップダウン)UPDATE CURRENT_TIMESTAMPを選択します