Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL InnoDB - Confuso sulle transazioni

Se il problema è qualcosa del tipo "Questo inserto ha violato una chiave univoca ", il commit avrà luogo. Devi verificare tu stesso se la query ha restituito errori e, in tal caso, ROLLBACK .

Se il problema è ad esempio un arresto imprevisto del server, le query 1 e 2 non verranno eseguite.

Ovviamente, poiché le tue 3 domande qui sono le stesse, questo è un esempio sciocco. Almeno cambia il lid vedere. Perché non fai un rapido test?

Modifica:hai modificato la tua domanda sullo scopo delle transazioni.

Lo scopo delle transazioni è infatti mantenere il database in uno stato coerente (leggi su ACID ), ma spetta al programmatore decidere cosa è coerente. Guarda risposta di prodigitalson per vedere un esempio di un possibile metodo php di rilevamento degli errori che lo fa per te. Ma mentre sei in una transazione, altri processi non vedranno le modifiche che sta facendo la tua transazione, quindi atomica e isolata.

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;