-1

私は、cakephp と jQuery を使用して彗星 ajax を追加する必要がある 1 つのプロジェクトに取り組んでいます。

そのために、このチュートリアルを使用しています。

私はそれを正常に実装しましたが、テキスト ファイルの変更時間を mysql テーブルの変更時間に置き換えたいと考えています。

私はSHOW TABLE STATUSmysqlクエリを使用し、mysqlテーブルの更新時間を取得しましたが、レコードを追加、変更、または削除すると、どういうわけかテーブルUpdate_timeが更新されない理由がわかりません。

PHPコードを使用してそのテーブルの詳細を更新できるかどうか、またはこれを達成するための他のより良い方法があるかどうかを教えてください。

ありがとう。

4

1 に答える 1

1

SHOW TABLE STATUSSyntaxの下に記載されているように:

  • Update_time

    データ ファイルが最後に更新された日時。一部のストレージ エンジンでは、この値はNULLです。たとえば、システム テーブルスペースInnoDBに複数のテーブルを格納し、データ ファイルのタイムスタンプは適用されません。各テーブルが個別のファイルにあるfile-per-tableモードでも、変更バッファリングによってデータ ファイルへの書き込みが遅延する可能性があるため、ファイルの変更時刻は、最後の挿入、更新、または削除の時刻とは異なります。の場合、データ ファイルのタイムスタンプが使用されます。ただし、Windows では更新によってタイムスタンプが更新されないため、値は不正確です。InnoDB.ibdMyISAM

代わりに、テーブルが変更されるたびに現在のタイムスタンプで別のテーブルを更新するトリガーを作成できます。

CREATE TABLE log (
  table_name VARCHAR(64) NOT NULL,
  lastmodified TIMESTAMP NOT NULL,
  PRIMARY KEY (table_name)
);

CREATE TRIGGER foo_ins AFTER INSERT ON my_table FOR EACH ROW
INSERT INTO log (table_name, lastmodified) VALUES ('my_table', NOW())
ON DUPLICATE KEY UPDATE lastmodified = NOW();

CREATE TRIGGER foo_ins AFTER UPDATE ON my_table FOR EACH ROW
INSERT INTO log (table_name, lastmodified) VALUES ('my_table', NOW())
ON DUPLICATE KEY UPDATE lastmodified = NOW();

CREATE TRIGGER foo_ins AFTER DELETE ON my_table FOR EACH ROW
INSERT INTO log (table_name, lastmodified) VALUES ('my_table', NOW())
ON DUPLICATE KEY UPDATE lastmodified = NOW();
于 2012-12-18T09:51:48.990 に答える