ClocxHD
Lt. Junior Grade
- Registriert
- Aug. 2014
- Beiträge
- 376
Hallo,
wir haben die Aufgabe, uns mit Transaktionen auseinanderzusetzen.
Ich versuche, einen Wert einzufügen, und falls dieser schon vorhanden ist, soll ein Rollback ausgeführt werden.
Vorab mein SQL:
Wenn der Wert bereits vorhanden ist, wird auch ausgegeben, dass dieser schon vorhanden ist, also springt er (wie er auch soll) in die else Schleife.
Jedoch wird das Rollback nicht ausgeführt, der Wert wird trotzdem eingefügt.
Durch Googlen habe ich herausgefunden, dass Transaktionen nur unter der InnoDB-Engine funktionieren, jedoch ist diese bei mir Standard, also auch in der gewählten Datenbank eingestellt.
Meine MySQL-Server Version: 5.7.15
LG,
ClocxHD
wir haben die Aufgabe, uns mit Transaktionen auseinanderzusetzen.
Ich versuche, einen Wert einzufügen, und falls dieser schon vorhanden ist, soll ein Rollback ausgeführt werden.
Vorab mein SQL:
Code:
SET autocommit = 0;
INSERT INTO `Service`(`Name`, `Port`, `Protocol`, `ipID`, `hID`) VALUES ('Testdienst', '8080', 'TCP', 1, 13);
DROP PROCEDURE IF EXISTS testTrans;
DELIMITER |
CREATE PROCEDURE testTrans(
OUT result VARCHAR(255)
)
BEGIN
START TRANSACTION;
IF (SELECT COUNT(`Name`) FROM `Service` WHERE `Name` LIKE 'Testdienst')=0 THEN
COMMIT;
SET result = "Der Wert war noch nicht vorhanden, COMMIT ausgeführt.";
ELSE
ROLLBACK;
SET result = "Der Wert war bereits vorhanden, ROLLBACK ausgeführt!";
END IF;
END|
DELIMITER ;
CALL testTrans(@val);
SELECT @val;
Wenn der Wert bereits vorhanden ist, wird auch ausgegeben, dass dieser schon vorhanden ist, also springt er (wie er auch soll) in die else Schleife.
Jedoch wird das Rollback nicht ausgeführt, der Wert wird trotzdem eingefügt.
Durch Googlen habe ich herausgefunden, dass Transaktionen nur unter der InnoDB-Engine funktionieren, jedoch ist diese bei mir Standard, also auch in der gewählten Datenbank eingestellt.
Meine MySQL-Server Version: 5.7.15
LG,
ClocxHD