データベース時間のデフォルト


データベース時間のデフォルト


NOW()からデータベースへ


RDBSを使用する場合にMongooseを使用するのとは異なり、直接クエリー文を作成しています.Insert文の作成時には、作成時間と修正時間を保存するために、NOW()により現在時刻が記述される.
しかし、Insert文を記入するたびに、Update文を記入するたびに、照会はNOW()文を記入しますか?

Table作成時のDefault

InsertUpdateで何気なくNOW()で時間値が生成されていますが、考えてみればTableを生成する際にDefaultとして使えるはずです.△私は質問を受けて、そうだと思いました.
CREATE TABLE posts (
	title varchar(100) NOT NULL,
    created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
その結果、次のように時間をデフォルト値として保存できます.

更新するときの基本は?


ただし、Updateを行う場合、基本更新は変更されない.

MySQL

MySQLを使用している場合は、
このため、Tableは次のように作成できます.
CREATE TABLE posts (
	title varchar(100) NOT NULL,
    created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

PostgreSQL


ただし、PostgreSQLを使用する場合は適用されません.

MySQLとPostgreSQLの比較PostgreSQLがトリガを使用することを確認した場合、Updateの現在の時間がデフォルトです.
CREATE OR REPLACE FUNCTION update_updated_column() 
        RETURNS TRIGGER AS '
  BEGIN
    NEW.updated = NOW();
    RETURN NEW;
  END;
' LANGUAGE 'plpgsql';

CREATE TRIGGER update_updated_modtime BEFORE UPDATE
  ON posts FOR EACH ROW EXECUTE PROCEDURE
  update_updated_column();
フリップフロップの結果から、updatedNOW()に更新したFUNCTIONが生成され、Updateで対応するFUNCTIONが実行される.

参考資料

  • Update timestamp when row is updated in PostgreSQL
  • MySQL versus PostgreSQL: Adding a 'Last Modified Time' Column to a Table