Ich möchte den Änderungsverlauf für einen Benutzer verfolgen, sodass ich bei jeder Änderung seines Profils die alten Daten übernehmen und im Verlauf speichern und mit neuen Daten aktualisieren muss.
Ich kann a verwenden select
, um die alten Daten abzurufen, um einen Verlauf insert
zu erstellen und schließlich update
um Daten zu ändern.
Kann ich all dies in einer einzigen Abfrage in MySQL haben, ohne gespeicherte Prozeduren, Trigger usw. zu verwenden, wie z. B. Sperren usw.? Wenn ja, geben Sie mir ein kleines Beispiel.
Antworten:
Um dies zu tun , ohne das Risiko , einen anderen Benutzer blockieren versucht , das gleiche Profil in der gleichen Zeit zu aktualisieren, müssen Sie die Zeile sperren in
t1
ersten, dann verwenden Sie eine Transaktion (wie Rolando auf Ihre Frage in den Kommentaren weist darauf hin):quelle
Ich glaube nicht, dass es eine Möglichkeit gibt, alle drei Aussagen zu kombinieren. Das, was dem am nächsten kommt, hilft dir nicht wirklich, und das ist ein SET SELECT. Ihre beste Wette ist ein Auslöser. Unten finden Sie ein Beispiel für einen Trigger, den ich häufig verwende, um einen solchen Audit-Trail (mit PHP erstellt) zu verwalten:
quelle
Ich habe festgestellt, dass diese Abfrage auf SQL- und MySQL-Servern funktioniert
INSERT INTO t2 SELECT * FROM t1 WHERE id=10; UPDATE t1 SET id=11 WHERE id=10;
Hoffe, dass dies auch in Zukunft für andere nützlich ist.
quelle