Ein doppelter Schlüsselfehler bricht die mysql-Transaktion nicht ab bzw. setzt sie nicht zurück
Bei einer mysql innodb-Transaktion würde ich erwarten, dass ein doppelter Schlüsselfehler ein Rollback verursacht. Das tut es nicht, sondern es löst einfach einen Fehler aus und fährt mit dem nächsten Befehl fort. Sobald der COMMIT-Befehl erreicht ist, wird die Transaktion festgeschrieben, ohne den Befehl, der den doppelten Schlüssel verursacht.
Ist das das erwartete Verhalten? Wenn ja, wie würde man vorgehen, um es so einzurichten, dass die Transaktion zurückgesetzt wird, anstatt festgeschrieben zu werden, wenn ein solcher Fehler auftritt?
Test Umgebung:
CREATE TABLE `test` (
`id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
BEGIN;
INSERT INTO test VALUES (5);
INSERT INTO test VALUES (5);
COMMIT;
erwartetes Ergebnis: Tabelletest
ist leer
Tatsächliches Ergebnis: Tabelletest
enthält einen Datensatz mit dem Wert 5