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

MySQL InnoDB - Forvirret over transaktioner

Hvis problemet er noget i stil med "Denne indsættelse krænkede en unik nøgle ", vil commit finde sted. Du skal selv kontrollere, om forespørgslen returnerede fejl, og i så fald ROLLBACK .

Hvis problemet for eksempel er en uventet lukning af serveren, vil forespørgsler 1 og 2 ikke finde sted.

Selvfølgelig, da dine 3 forespørgsler her er de samme, er dette et dumt eksempel. Skift i det mindste lid at se. Hvorfor laver du ikke en hurtig test?

Rediger:du har redigeret dit spørgsmål om formålet med transaktioner.

Formålet med transaktioner er faktisk at holde databasen i en konsistent tilstand (læs op på ACID ), men det er op til programmøren at beslutte, hvad der er konsekvent. Se prodigitalsons svar for at se et eksempel på en mulig php-måde til fejlfangning, der gør dette for dig. Men mens du er i en transaktion, vil andre processer ikke se de ændringer, din transaktion foretager - derfor atomære og isolerede.

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;


  1. MYSQL-sag i select-sætning til kontrol af null

  2. Mysqldump' genkendes ikke som et internt eller eksternt kommandoprogram eller batchfil

  3. Indstil DataGridView.DataSource async

  4. SQL-brug kolonne fra undervalg i where-sætning