In einigen Fällen kann das Ausführen einer UPDATE-Anweisung in der Produktion den Tag retten. Ein falsches Update kann jedoch schlimmer sein als das ursprüngliche Problem.
Welche Optionen stehen zur Verfügung, um zu bestimmen, was eine Update-Anweisung vor der Ausführung tun soll, ohne eine Testdatenbank zu verwenden?
FOREIGN KEY UPDATE CASCADE
Ihre SQL-Fehler habenWas ist mit Transaktionen? Sie haben die ROLLBACK-Funktion.
@see https://dev.mysql.com/doc/refman/5.0/en/commit.html
Beispielsweise:
Antwort auf die Frage von @rickozoe unten:
Im Allgemeinen werden diese Zeilen nicht einmal ausgeführt. In PHP zB würden Sie so etwas schreiben (vielleicht etwas sauberer, wollten aber schnell antworten ;-)):
Eine andere Möglichkeit wäre die Verwendung von MySQL-Variablen (siehe https://dev.mysql.com/doc/refman/5.7/en/user-variables.htm l und https://stackoverflow.com/a/18499823/1416909 ):
Ich würde jedoch empfehlen, die in Ihrer bevorzugten Programmiersprache verfügbaren Sprachumschläge zu verwenden.
quelle
Autocommit AUS ...
MySQL
Dadurch wird die automatische Festschreibung für die aktuelle Sitzung deaktiviert.
Sie führen Ihre Anweisung aus, sehen, was sie geändert hat, und führen dann einen Rollback durch, wenn sie falsch ist, oder legen fest, wenn sie Ihren Erwartungen entspricht!
BEARBEITEN: Der Vorteil der Verwendung von Transaktionen anstelle der Ausführung einer Auswahlabfrage besteht darin, dass Sie die resultierende Menge einfacher überprüfen können.
quelle
Ich weiß, dass dies eine Wiederholung anderer Antworten ist, aber es hat eine gewisse emotionale Unterstützung, um den zusätzlichen Schritt zum Testen des Updates zu unternehmen: D.
Zum Testen des Updates ist Hash # Ihr Freund.
Wenn Sie eine Update-Anweisung haben wie:
Sie hashen UPDATE und SET zum Testen und hashen sie dann wieder ein:
Es funktioniert für einfache Aussagen.
Eine zusätzliche, praktisch obligatorische Lösung besteht darin, eine Kopie (Sicherungsduplikat) zu erhalten, wenn ein Update für eine Produktionstabelle verwendet wird. Phpmyadmin> Operationen> Kopie: table_yearmonthday. Für Tabellen <= 100M dauert es nur wenige Sekunden.
quelle
Keine direkte Antwort, aber ich habe viele Situationen mit fehlerhaften Produktdaten gesehen, die hätten vermieden werden können, wenn man zuerst die
WHERE
Klausel eingegeben hätte ! ManchmalWHERE 1 = 0
kann a auch bei der sicheren Zusammenstellung einer Arbeitserklärung helfen. Ein Blick auf einen geschätzten Ausführungsplan, der die betroffenen Zeilen schätzt, kann hilfreich sein. Darüber hinaus in einer Transaktion, die Sie zurücksetzen, wie andere gesagt haben.quelle
WHERE 1 = 0
ist jedoch portabler, wenn jemand darauf stößt, der mit einem anderen DBMS arbeitet. Beispielsweise akzeptiert SQL Server nichtWHERE FALSE
.In diesen Fällen, die Sie testen möchten, empfiehlt es sich, sich nur auf aktuelle Spaltenwerte und in Kürze zu aktualisierende Spaltenwerte zu konzentrieren.
Bitte schauen Sie sich den folgenden Code an, den ich geschrieben habe, um die WHMCS-Preise zu aktualisieren:
Auf diese Weise vergleichen wir bereits vorhandene Werte klar mit neuen Werten.
quelle
Führen Sie eine Auswahlabfrage in derselben Tabelle mit allen
where
Bedingungen aus, die Sie in der Aktualisierungsabfrage anwenden.quelle
mach ein
SELECT
daraus,wie wenn du hast
UPDATE users SET id=0 WHERE name='jan'
konvertiere es in
SELECT * FROM users WHERE name='jan'
quelle