Drei Dinge, die ich im Laufe der Jahre auf die harte Tour gelernt habe ...
Wenn Sie Live-Daten aktualisieren oder löschen, schreiben Sie zunächst eine SELECT-Abfrage mit der WHERE-Klausel, die Sie verwenden. Stellen Sie sicher, dass es funktioniert. Stellen Sie sicher, dass es korrekt ist. Stellen Sie dann die Anweisung UPDATE / DELETE der bekannten funktionierenden WHERE-Klausel voran.
Das willst du nie haben
DELETE FROM Customers
Sie sitzen in Ihrem Abfrageanalysator und warten darauf, dass Sie die WHERE-Klausel schreiben. Drücken Sie versehentlich auf "Ausführen", und Sie haben gerade Ihre Kundentabelle getötet. Hoppla.
Erfahren Sie außerdem, wie Sie je nach Plattform schnell und einfach eine Tabelle sichern können. In SQL Server 2005
SELECT *
INTO CustomerBackup200810032034
FROM Customer
kopiert jede Zeile aus der gesamten Kundentabelle in eine neue Tabelle mit dem Namen CustomerBackup200810032034, die Sie dann löschen können, sobald Sie Ihre Aktualisierungen vorgenommen und sichergestellt haben, dass alles in Ordnung ist. Im schlimmsten Fall ist es viel einfacher, fehlende Daten aus dieser Tabelle wiederherzustellen, als zu versuchen, das Backup der letzten Nacht von Festplatte oder Band wiederherzustellen.
Seien Sie schließlich vorsichtig bei Kaskadenlöschungen, um Dinge zu entfernen, die Sie nicht löschen wollten. Überprüfen Sie die Beziehungen und wichtigsten Einschränkungen Ihrer Tabellen, bevor Sie Änderungen vornehmen.
Auf diese Weise können Sie nach einem Fehler einen Rollback durchführen.
quelle
Machen Sie zuerst ein Backup: Es sollte sowieso das Gesetz Nummer 1 der Systemadministration sein
BEARBEITEN : Wenn Sie berücksichtigen, was andere gesagt haben, stellen Sie sicher, dass Ihre UPDATES die entsprechenden WHERE-Klauseln enthalten.
Im Idealfall sollte eine Live-Datenbank niemals geändert werden (über INSERTs und grundlegende Wartung hinaus). Das Ändern der Struktur der Live-DB ist besonders mit potenziell schlechtem Karma behaftet.
quelle
Nehmen Sie Ihre Änderungen an einer Kopie vor. Wenn Sie zufrieden sind, wenden Sie den Fix auf live an.
quelle
Oft schreibe ich, bevor ich ein UPDATE oder DELETE mache, das entsprechende SELECT.
quelle
Führen Sie NIEMALS ein Update durch, es sei denn, Sie befinden sich in einem BEGIN TRAN t1 - nicht in einer Entwicklungsdatenbank, nicht in der Produktion, nirgendwo. Führen Sie NIEMALS einen COMMIT TRAN t1 außerhalb eines Kommentars aus - geben Sie immer ein
und wählen Sie dann die Anweisung aus, um sie auszuführen. (Dies gilt natürlich nur für GUI-Abfrage-Clients.) Wenn Sie diese Dinge tun, wird es zur zweiten Natur, sie zu tun, und Sie werden kaum Zeit verlieren.
Ich habe tatsächlich ein "Update" -Makro, das dies eingibt. Ich füge dies immer ein, um meine Updates einzurichten. Sie können eine ähnliche für Löschvorgänge und Einfügungen erstellen.
quelle
Stellen Sie immer sicher, dass Ihre UPDATEs und DELETEs die richtige WHERE-Klausel haben.
quelle
Um meine eigene Frage zu beantworten:
Wenn Sie eine Update-Anweisung schreiben, schreiben Sie sie nicht in der richtigen Reihenfolge.
UPDATE [table-name]
WHERE [conditions]
SET [columns-and-values]
Die Auswahl der Zeilen, die Sie aktualisieren möchten, bevor Sie angeben, welche Werte Sie ändern möchten, ist viel sicherer als die Auswahl in der anderen Reihenfolge. Es macht es unmöglich für
update person set email = '[email protected]'
, in Ihrem Abfragefenster zu sitzen und bereit zu sein, von einem falsch platzierten Tastenanschlag ausgeführt zu werden, und bereit zu sein, jede Zeile in der Tabelle durcheinander zu bringen.Bearbeiten: Wie andere gesagt haben, schreiben Sie die
WHERE
Klausel für Ihre Löschungen, bevor Sie schreibenDELETE
.quelle
Als Beispiel erstelle ich SQL wie folgt
Ich hebe den Text vom Ende bis zur Auswahl hervor und führe diese SQL aus. Sobald ich überprüft habe, ob der Datensatz, den ich aktualisieren möchte, abgerufen wird, drücke ich auf Umschalttaste, um die Update-Anweisung hervorzuheben und auszuführen.
Beachten Sie, dass ich einen Alias verwendet habe. Ich aktualisiere niemals eine explizite Tabellenname. Ich benutze immer einen Alias.
Wenn ich dies in Verbindung mit Transaktionen und Rollback / Commits mache, bin ich wirklich sehr, sehr sicher.
quelle
Meine erste Möglichkeit, mit einer Live-Datenbank vorsichtig zu sein? Fass es nicht an. :) :)
Backups können Schäden, die Sie der Datenbank zufügen, rückgängig machen. In dieser Zeit treten jedoch wahrscheinlich immer noch negative Nebenwirkungen auf.
Egal, wie solide Sie das Skript finden, mit dem Sie arbeiten, führen Sie es durch einen Testzyklus. Auch wenn ein "Testzyklus" bedeutet, dass das Skript für Ihre eigene Instanz der Datenbank ausgeführt wird, stellen Sie sicher, dass Sie dies tun. Es ist viel besser, Fehler in Ihre lokale Box einzuführen als in eine Produktionsumgebung.
quelle
Ein paar andere Dinge, die ich hilfreich fand:
Wenn Sie MySQL verwenden, aktivieren Sie sichere Updates
Wenn Sie einen DBA haben, bitten Sie ihn, dies zu tun.
Ich habe festgestellt, dass diese drei Dinge mich davon abgehalten haben, ernsthaften Schaden anzurichten.
quelle
Nun, das ist ungefähr alles, woran ich jetzt denken kann. Nehmen Sie die kühnen Passagen und Sie sehen, was für mich die Nummer 1 ist. ;-);
quelle
Vielleicht sollten Sie überhaupt keine Löschvorgänge oder Löschvorgänge verwenden. Oder reduzieren Sie die Benutzerberechtigungen, sodass nur ein spezieller DB-Benutzer Dinge löschen / löschen kann.
quelle
Wenn Sie Oracle oder eine andere Datenbank verwenden, die dies unterstützt, überprüfen Sie Ihre Änderungen, bevor Sie ein COMMIT ausführen.
quelle
Daten sollten immer live bereitgestellt werden, und zwar über Skripte, die so oft einstudiert werden können, wie es erforderlich ist, um sie auf dev richtig zu machen. Wenn abhängige Daten für das Skript auf dev korrekt ausgeführt werden müssen, stellen Sie sie entsprechend bereit. Sie können diesen Schritt nicht ausführen, wenn Sie wirklich vorsichtig sein möchten.
quelle
Zweimal prüfen, einmal festschreiben!
quelle
Sichern oder sichern Sie die Datenbank vor dem Start.
quelle
Um das, was @ Wayne gesagt hat, zu ergänzen , schreiben Sie Ihren
WHERE
vor dem Tabellennamen in eineDELETE
oder-UPDATE
Anweisung.quelle
SICHERN SIE IHRE DATEN. Ich habe gelernt, dass man auf die harte Tour regelmäßig mit Kundendatenbanken arbeitet.
quelle
Fügen Sie immer eine using-Klausel hinzu.
quelle
Meine Regel (als App-Entwickler): Fass es nicht an! Dafür sind die ausgebildeten Datenbankadministratoren da. Ich möchte nicht einmal die Erlaubnis, es zu berühren. :) :)
quelle
Unterschiedliche Farben pro Umgebung: Wir haben unseren PL \ SQL-Entwickler (IDE für Oracle) so eingerichtet, dass bei der Anmeldung bei der Produktionsdatenbank alle Fenster hellrot sind. Einige haben sogar eine andere Farbe für Entwickler und Tests zugewiesen.
quelle
Stellen Sie sicher, dass Sie beim Löschen von Datensätzen eine where-Klausel angeben.
quelle
Testen Sie Fragen, die über die Auswahl hinausgehen, immer zuerst auf Entwicklungsdaten, um sicherzustellen, dass sie die richtigen Auswirkungen haben.
quelle
quelle
Wenn ich eine Datenbank mit einem Skript aktualisiere, stelle ich immer sicher, dass ich am Anfang meines Skripts einen oder zwei Haltepunkte setze, nur für den Fall, dass ich versehentlich auf Ausführen / Ausführen stoße.
quelle
Ich werde die Empfehlungen zu BEGIN TRAN vor Ihrem UPDATE ergänzen. Vergessen Sie jedoch nicht, das COMMIT tatsächlich durchzuführen. Sie können genauso viel Schaden anrichten, wenn Sie Ihre nicht festgeschriebene Transaktion offen lassen. Lassen Sie sich nicht von Telefonen, Kollegen, Mittagessen usw. ablenken, wenn Sie sich mitten in Updates befinden. Andernfalls werden Sie feststellen, dass alle anderen Personen gesperrt sind, bis Sie COMMIT oder ROLLBACK ausführen.
quelle
Ich kommentiere immer destruktive Abfragen (Einfügen, Aktualisieren, Löschen, Löschen, Ändern), wenn ich Ad-hoc-Abfragen in Query Analyzer schreibe. Auf diese Weise können Sie sie nur ausführen, indem Sie sie markieren, ohne den kommentierten Teil auszuwählen, und F5 drücken.
Ich denke auch, dass es eine gute Idee ist, wie bereits erwähnt, zuerst Ihre where-Anweisung mit einer Auswahl zu schreiben und sicherzustellen, dass Sie die richtigen Daten ändern.
quelle
quelle
Erstellen Sie einen schreibgeschützten Benutzer (oder lassen Sie den DBA dies tun) und verwenden Sie diesen Benutzer nur, um die Datenbank anzuzeigen. Fügen Sie dem Schema die entsprechenden Berechtigungen hinzu, damit Sie den Inhalt gespeicherter Prozeduren / Ansichten / Trigger / etc. Anzeigen können. aber nicht die Fähigkeit haben, sie zu ändern.
quelle