In der Fußzeile meiner Seite möchte ich etwas wie "Zuletzt aktualisiert xx / xx / 200x" hinzufügen, wobei dieses Datum das letzte Mal ist, dass eine bestimmte mySQL-Tabelle aktualisiert wurde.
Was ist der beste Weg das zu tun? Gibt es eine Funktion zum Abrufen des letzten aktualisierten Datums? Sollte ich jedes Mal auf die Datenbank zugreifen, wenn ich diesen Wert benötige?
Antworten:
In späteren Versionen von MySQL können Sie die
information_schema
Datenbank verwenden, um zu erfahren, wann eine andere Tabelle aktualisiert wurde:Dies bedeutet natürlich, eine Verbindung zur Datenbank herzustellen.
Eine alternative Option wäre, eine bestimmte Datei zu "berühren", wenn die MySQL-Tabelle aktualisiert wird:
Bei Datenbankaktualisierungen:
O_RDRW
Modusclose
es wiederoder alternativ
touch()
das PHP-Äquivalent derutimes()
Funktion, um den Dateizeitstempel zu ändern.Auf der Seitenanzeige:
stat()
diese Option, um die Änderungszeit der Datei zurückzulesen.quelle
show table status
verwendetinformation_schema.tables
)UPDATE_TIME
Methode als auch die folgendeshow table status
Methode sind nur mit der MyISAM-Engine verfügbar, nicht mit InnoDB. Obwohl dies als Fehler aufgeführt ist , wird es in der MySQL 5.5-Referenz erwähnt , die auch besagt, dass derfile_per_table
Modus ein unzuverlässiger Indikator für die Änderungszeit ist.Ich habe keine information_schema-Datenbank mit MySQL-Version 4.1.16. In diesem Fall können Sie Folgendes abfragen:
Diese Spalten werden zurückgegeben:
Wie Sie sehen können, gibt es eine Spalte mit dem Namen " Update_time ", die Ihnen die letzte Aktualisierungszeit für Ihre_Tabelle anzeigt .
quelle
Ich bin überrascht, dass niemand vorgeschlagen hat, die letzte Aktualisierungszeit pro Zeile zu verfolgen:
Dadurch wird der Zeitstempel aktualisiert, obwohl wir ihn im UPDATE nicht erwähnt haben.
Jetzt können Sie nach MAX () fragen:
Dies erfordert zwar mehr Speicherplatz (4 Bytes pro Zeile für TIMESTAMP).
Aber das funktioniert für InnoDB - Tabellen vor 5.7.15 Version von MySQL, die
INFORMATION_SCHEMA.TABLES.UPDATE_TIME
nicht der Fall ist.quelle
Am einfachsten wäre es, den Zeitstempel der Tabellendateien auf der Festplatte zu überprüfen. Sie können beispielsweise in Ihrem Datenverzeichnis nachsehen
Dies sollte Ihnen die Liste aller Tabellen mit der Tabelle geben, als sie zuletzt zum ältesten Mal zuerst geändert wurde.
quelle
Verwenden Sie Folgendes, um eine Liste der letzten Tabellenänderungen anzuzeigen:
quelle
UPDATE_TIME
null? Irgendeine Idee?Ich würde einen Trigger erstellen, der alle Aktualisierungen / Einfügungen / Löschungen abfängt und einen Zeitstempel in eine benutzerdefinierte Tabelle schreibt, so etwas wie Tabellenname | Zeitstempel
Nur weil mir die Idee nicht gefällt, interne Systemtabellen des DB-Servers direkt zu lesen
quelle
UPDATE_TIME
Spalte wie in MySQL gibt.Obwohl es eine akzeptierte Antwort gibt, glaube ich nicht, dass es die richtige ist. Es ist der einfachste Weg, um das zu erreichen, was benötigt wird, aber selbst wenn es bereits in InnoDB aktiviert ist (tatsächlich sagen Ihnen die Dokumente, dass Sie immer noch NULL erhalten sollten ...), wenn Sie MySQL- Dokumente lesen , ist dies auch in der aktuellen Version (8.0) mit UPDATE_TIME der Fall nicht die richtige Option, weil:
Wenn ich das richtig verstehe (kann es derzeit auf einem Server nicht überprüfen), wird der Zeitstempel nach dem Neustart des Servers zurückgesetzt.
Für echte (und auch kostspielige) Lösungen haben Sie die Lösung von Bill Karwin mit CURRENT_TIMESTAMP und ich möchte eine andere vorschlagen, die auf Triggern basiert (ich verwende diese).
Sie erstellen zunächst eine separate Tabelle (oder haben möglicherweise eine andere Tabelle, die für diesen Zweck verwendet werden kann), die wie ein Speicher für globale Variablen (hier Zeitstempel) funktioniert. Sie müssen zwei Felder speichern - Tabellenname (oder welchen Wert Sie hier als Tabellen-ID behalten möchten) und Zeitstempel. Nachdem Sie es haben, sollten Sie es mit dieser Tabellen-ID + Startdatum initialisieren (NOW () ist eine gute Wahl :)).
Nun wechseln Sie zu Tabellen, die Sie beobachten möchten, und fügen Trigger NACH EINFÜGEN / UPDATE / LÖSCHEN mit diesem oder einem ähnlichen Verfahren hinzu:
quelle
Analyse auf Betriebssystemebene:
Finden Sie heraus, wo die Datenbank auf der Festplatte gespeichert ist:
Suchen Sie nach den neuesten Änderungen
Sollte auf allen Datenbanktypen funktionieren.
quelle
Holen Sie sich einfach das vom Dateisystem geänderte Dateidatum. In meiner Sprache heißt das:
Ausgabe:
quelle
Wenn Sie Linux ausführen, können Sie mit inotify die Tabelle oder das Datenbankverzeichnis anzeigen. inotify ist in PHP, node.js, perl verfügbar und ich vermute die meisten anderen Sprachen. Natürlich müssen Sie inotify installiert haben oder von Ihrem ISP installieren lassen. Viele ISP werden nicht.
quelle
Ich bin mir nicht sicher, ob dies von Interesse wäre. Die Verwendung von mysqlproxy zwischen mysql und Clients und die Verwendung eines lua-Skripts zum Aktualisieren eines Schlüsselwerts in memcached gemäß interessanten Tabellenänderungen UPDATE, DELETE, INSERT war die Lösung, die ich vor kurzem durchgeführt habe. Wenn der Wrapper Hooks oder Trigger in PHP unterstützt, könnte dies einfacher gewesen sein. Keiner der Wrapper tut dies derzeit.
quelle
Ich habe eine Spalte nach Namen erstellt: update-at in phpMyAdmin und die aktuelle Uhrzeit von der Date () -Methode in meinem Code (nodejs) erhalten. Bei jeder Änderung in der Tabelle enthält diese Spalte den Zeitpunkt der Änderungen.
quelle
a) Es werden alle Tabellen und die letzten Aktualisierungsdaten angezeigt
Dann können Sie weiter nach einer bestimmten Tabelle fragen:
b) Wie in den obigen Beispielen können Sie die Sortierung nach 'Update_time' nicht verwenden, aber mit SELECT können Sie:
um weiter nach einem bestimmten Tisch zu fragen:
quelle
Das habe ich getan, ich hoffe es hilft.
quelle
Zwischenspeichern Sie die Abfrage in einer globalen Variablen, wenn sie nicht verfügbar ist.
Erstellen Sie eine Webseite, um zu erzwingen, dass der Cache beim Aktualisieren neu geladen wird.
Fügen Sie einen Aufruf zur Seite zum erneuten Laden in Ihre Bereitstellungsskripts ein.
quelle