このコマンドは、テーブルの最終更新日を示します
SELECT UPDATE_TIME
FROM information_schema.tables
WHERE TABLE_SCHEMA = 'MyDB'
AND TABLE_NAME = 'MyTable'
しかし、テーブルの特定の列が最後に更新された時刻を知りたいのですが。システムテーブルから特定の列が最後に更新された時刻を知りたいので、トリガーを使用できません。
私の問題をうまく説明できたらいいのですが。
そのような情報がどこかに記録されているシステムテーブル(つまり、 INFORMATION_SCHEMAデータベースに何も存在しない )は存在しません。つまり、列の変更にタイムスタンプを付けるネイティブのメカニズムはありません。いつでも
UPDATE_TIME
の列INFORMATION_SCHEMA.TABLES
が更新されました。
これは飲み込むのに苦い錠剤かもしれませんが、次のことを行う必要があります。
BEFORE UPDATE
トリガーして新旧の列を比較し、一致しない場合は記録しますいくつかのテーブルといくつかの列をカスタマイズしている場合、これはそれほど悪くないかもしれません。
あなたができることは、テーブルが更新されるたびにタイムスタンプを保存するようにテーブルを変更することです。例えば
CREATE TABLE foo (
id INT PRIMARY KEY
x INT,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
KEY (updated_at)
);
上記のコードは、現在のタイムスタンプを新しい行に格納し、行が編集されるたびに編集された時刻を変更します。このようにして、データを取得し、並べ替えることができます(order by
)descending
モードで、トップレコードを取得します。このようにして、テーブルで最後に更新されたレコードを取得します。データベース全体について知りたい場合は、各テーブルの最後に更新されたレコードを比較して、最新のレコードを取得する必要があります。