sql >> Databasteknik >  >> RDS >> Mysql

MySQL InnoDB - Förvirrad om transaktioner

Om problemet är något i stil med "Denna infogning kränkte en unik nyckel ", kommer commit att äga rum. Du måste kontrollera själv om frågan returnerade fel, och i så fall ROLLBACK .

Om problemet till exempel är en oväntad avstängning av servern, kommer frågor 1 och 2 inte att ske.

Givetvis, eftersom dina tre frågor här är desamma är detta ett dumt exempel. Ändra åtminstone lid att se. Varför gör du inte ett snabbt test?

Redigera:du redigerade din fråga om syftet med transaktioner.

Syftet med transaktioner är verkligen att hålla databasen i ett konsekvent tillstånd (läs på ACID ), men det är upp till programmeraren att bestämma vad som är konsekvent. Titta på prodigitalsons svar för att se ett exempel på ett möjligt php-sätt för felfångning som gör detta åt dig. Men medan du är i en transaktion kommer andra processer inte att se de förändringar som din transaktion gör - därför atomära och isolerade.

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. Oracle SQL:Uppdatera en tabell med data från en annan tabell

  2. Hur man infogar stora mängder data i sqlite-databasen i Android

  3. SQL-fråga för att komprimera dubbletter av värden efter datumintervall

  4. DATE_SUB() Exempel – MySQL