Als het probleem zoiets is als "Deze invoeging heeft een unieke sleutel geschonden ", zal de commit plaatsvinden. Je moet zelf controleren of de query fouten heeft geretourneerd, en zo ja, ROLLBACK
.
Als het probleem bijvoorbeeld een onverwachte uitschakeling van de server is, zullen query's 1 en 2 niet plaatsvinden.
Natuurlijk, aangezien uw 3 vragen hier hetzelfde zijn, is dit een dwaas voorbeeld. Verander tenminste het lid
zien. Waarom doe je geen snelle test?
Bewerken:je hebt je vraag over het doel van transacties aangepast.
Het doel van transacties is inderdaad om de database in een consistente staat te houden (lees op ACID ), maar het is aan de programmeur om te beslissen wat consistent is. Bekijk het antwoord van prodigitalson om een voorbeeld te zien van een mogelijke php-manier van foutopsporing die dit voor u doet. Maar terwijl u bezig bent met een transactie, zullen andere processen de veranderingen die uw transactie aanbrengt niet zien - vandaar atomair en geïsoleerd.
CREATE TABLE `testkeys` (
`lid` INT,
`column_name` VARCHAR(50),
UNIQUE KEY `testuniq` (`lid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
BEGIN;
INSERT INTO testkeys(lid,column_name) VALUES(1,'test 1');
INSERT INTO testkeys(lid,column_name) VALUES(2,'test 2');
INSERT INTO testkeys(lid,column_name) VALUES(3,'test 3');
INSERT INTO testkeys(lid,column_name) VALUES(2,'test 2b');
COMMIT;