Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL InnoDB - Объркан относно транзакциите

Ако проблемът е нещо като „Това вмъкване наруши уникален ключ ", комитът ще се осъществи. Трябва да проверите сами дали заявката е върнала грешки и ако е така, ROLLBACK .

Ако проблемът е например неочаквано изключване на сървъра, заявки 1 и 2 няма да се осъществят.

Разбира се, тъй като вашите 3 заявки тук са еднакви, това е глупав пример. Поне сменете lid да видиш. Защо не направите бърз тест?

Редактиране:редактирахте въпроса си относно целта на транзакциите.

Целта на транзакциите наистина е да поддържа базата данни в последователно състояние (прочетете на ACID ), но програмистът трябва да реши кое е последователно. Вижте отговора на prodigitalson за да видите пример за възможен php начин за улавяне на грешки, който прави това вместо вас. Но докато сте в транзакция, другите процеси няма да видят промените, които вашата транзакция прави – следователно атомни и изолирани.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Персонализиран тип данни на Doctrine

  2. Използване на Mysqli bind_param с колони за дата и час?

  3. C# параметризирана заявка MySQL с клауза „in“.

  4. Работа със специални символи на пълен текст на MySQL

  5. HikariCP твърде много връзки