sql >> Database >  >> RDS >> Mysql

MySQL InnoDB - Verward over transacties

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;


  1. PDO::bindParam in een foreach-lus, worden alle waarden als hetzelfde ingesteld?

  2. Zeer trage (1 seconde) verbindingen

  3. Hoe alle product-ID's, sku's, productnamen en beschrijvingen in magento op te halen met alleen mysql?

  4. Back-up van mySQL-databases van localhost die op de Wamp-server draait