SQL MySQL Rollback funktioniert nicht

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:
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
 
Mit der MySQL Syntax bin ich nicht ganz so vertraut, aber dein INSERT INTO sollte innerhalb der Transaktion geschehen. Also z.B. in Zeile 12. So hat die Transaktion mit dem Insert gar nichts zu tun.
Oder du machst die Prozedur zum Testen und den Transaktionsblock von Zeile 2 bis 4. Und je nachdem was die Prozedur ausgibt machst du danach ein commit oder rollback.
 
Zurück
Oben