Ich las Artikel über Rollback-Transaktion und kann nicht finden, etwas wie ich brauche. Angenommen, ich habe eine Benutzertabelle. Der Benutzer kann seine Datensätze aktualisieren, aber ich möchte einen Rollback durchführen, wenn der eingegebene Wert null ist. Ich weiß, es gibt viele einfache Möglichkeiten, dies zu tun, wie zum Beispiel mit C# zu überprüfen, ob es null ist und solche Dinge, die hier auftauchen, verstehen Rollback. Wie kann ich Rollback mit If (Null) Code verwenden?Rollback wenn Null
Antwort
Rollback wird mit einer Transaktion verwendet, ein Rollback stellt den Zustand wieder her, wie er war, als begin tran ausgeführt wurde.
BEGIN TRAN 'tran1'
INSERT INTO Whatever table...
IF(... check for null)
BEGIN
ROLLBACK TRAN 'tran1'
RETURN 0
END
COMMIT TRAN 'tran1'
Es gibt drei Möglichkeiten. Erstens, wenn Ihre Schecks nur auf eine Spalte, verwenden Sie die check
Einschränkung für die Spaltendefinition:
create table test (
age int check (age > 40),
...
);
Fore komplexeren Einschränkungen, werden Sie triggers
benötigen. Die Art der verfügbaren Trigger hängt von der Technologie ab (Oracle, SQL Server, MySQL). In einem vor dem Einfügen oder vor dem Update Trigger, können Sie eine Ausnahme generieren, die automatisch die Transaktion endet (entspricht einem Rollback). Hier ist ein mysql Beispiel:
delimiter //
drop trigger if exists trg_trigger_test_ins //
create trigger trg_trigger_test_ins before insert on test
for each row
begin
declare msg varchar(128);
if new.age <= 40 then
set msg = concat('MyTriggerError: age incorrect : ', cast(new.id as char));
signal sqlstate '45000' set message_text = msg;
end if;
end
//
Schließlich können Sie starten eine Transaktion, Ihre Änderungen vornehmen, dann entscheiden, ob Sie wollen oder Rollback begehen.
Transaktion rückgängig zu machen Sie erste Transaktion beginnen. In der Regel haben DBMS implizite Transaktionen. Wenn nichts angegeben ist, startet jede Anweisung oder jeder Batch seine eigene Transaktion. Oder Sie können Transaktionsgrenzen explizit definieren.
Wenn Sie also eine (implizite, explizite) Transaktion benötigen, bei der die angegebene Spalte auf NULL gesetzt wird, um fehlzuschlagen und einen Rollback auszuführen, definieren Sie die Einschränkung für diese Spalte.
Alternativ können Sie nur einige explizite Transaktionen Rollback abhängig von dieser Spalte Wert und einige andere Bedingungen. Sie sollten diesen Code also explizit einchecken.
- 1. Macht Schienen Rollback, wenn ich beginne ... Rettung?
- 2. Rails Transaktion Rollback nicht geschieht, wenn after_create
- 3. JMS Rollback
- 4. ActiveRecord :: Rollback scheint keine Transaktion Rollback
- 5. MbUnit Rollback
- 6. Führt Sql einen impliziten Rollback durch, wenn mein Rollback-Timeout auftritt?
- 7. Transaktion: commit() vs rollBack()
- 8. Hibernate save() und Transaktion Rollback
- 9. EJB 3-Transaktion Rollback-Ausgabe
- 10. ORACLE Rollback und Trigger
- 11. Rollback für Massenkopie
- 12. TransactionScope und Rollback Objektstatus
- 13. Nested/Child TransactionScope Rollback
- 14. Ist ROLLBACK TRANSACTION erforderlich?
- 15. MySQL commit und rollback
- 16. Rollback IO-Aktion
- 17. Wie Rollback-Funktion implementieren?
- 18. Symfony2 Doctrine MongoDB Rollback
- 19. Insertion transaction- Rollback SQL
- 20. Azure ScaleSets Rollback nicht
- 21. MySQL subtrahieren wenn gefunden, zeige Null oder Null wenn nicht
- 22. Git Rollback 1 Pull
- 23. IDbTransaction Rollback Timeout
- 24. PDO Transaktion statt Rollback
- 25. Initialisierte String innerhalb, wenn sonst null null
- 26. Rückgabe Null, wenn Anzahl (*) NULL ist
- 27. Rollback einer bestimmten Migration ohne Rollback anderer Migrationen
- 28. Rollback von Fremdschlüsselbeziehungen mit Hibernate
- 29. Rollback-Transaktion, wenn bestimmte Bedingung erfüllt ist, vor Einfügungen
- 30. Wenn eine PHP-PDO-Transaktion fehlschlägt, muss ich explizit rollback()?
Warum nicht einfach NOT NULL Spalten? – jarlh
Wie ich schon sagte gibt es viele Möglichkeiten dies zu tun und nicht null ist einer von ihnen, aber ich brauche ein Beispiel für Rollback mit if. Es kann etwas wie "wenn Alter <40 dann Rollback" sein. Das Überprüfen von null war nur ein Beispiel @jarlh –
Bitte beschriften Sie, welche Sprache Sie verwenden und welchen Code Sie versucht haben. –