0

私は作成したMySQLテーブルを持っており、ISO 8601タイムスタンプをフィールドの1つに自動的に入れます。これは、phpMyAdmin のデフォルト値を TIMESTAMP に設定したためです。

フィールドを更新するときに、別のタイムスタンプを別のフィールドに追加したいと考えています。明らかに、デフォルトのオプションを使用してそれを行うことはできません。現在のタイムスタンプをフィールドに追加する SQL コマンドはありますか? MySQLのWebサイトをざっと読んだのですが、それを行う方法が見つかりませんでした...

また、PHP を介して ISO8601 タイムスタンプを生成する方法があるかどうかも調べましたが、PHP/unix タイムスタンプから ISO8601 に変換する方法がわかりませんでした。

乾杯!

4

1 に答える 1

1

MySQL は、すべてのテーブル内の単一の 型の列を現在の時刻に自動的に初期化および/または更新できます。の自動初期化と更新で説明されているように:TIMESTAMPINSERTUPDATETIMESTAMP

テーブル内の1 つTIMESTAMPの列は、列を初期化するためのデフォルト値、自動更新値、またはその両方として、現在のタイムスタンプを持つことができます。現在のタイムスタンプをある列のデフォルト値にして、別の列の自動更新値にすることはできません。

あなたの場合、別々の列にレコードの初期化と更新時間を保持する必要があるため、それらの列の一方 (または両方) を明示的に設定する必要があります。NOW()関数を使用して、SQL で日付/時刻列を現在の日付/時刻に明示的に設定できます。

INSERT INTO my_table (created) VALUES (NOW());
UPDATE my_table SET updated = NOW();

トリガーを使用して、MySQL によってネイティブに提供されていない自動動作を実現することもできます。

CREATE TRIGGER set_init_time AFTER INSERT ON my_table FOR EACH ROW
  SET NEW.created = NOW();

CREATE TRIGGER set_updt_time AFTER UPDATE ON my_table FOR EACH ROW
  SET NEW.updated = NOW();
于 2012-08-28T09:31:42.497 に答える