Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL InnoDB - Zdezorientowany transakcjami

Jeśli problem jest podobny do „Ta wstawka naruszyła unikalny klucz ", nastąpi zatwierdzenie. Musisz sam sprawdzić, czy zapytanie zwróciło błędy, a jeśli tak, to ROLLBACK .

Jeśli problemem jest na przykład nieoczekiwane zamknięcie serwera, zapytania 1 i 2 nie będą miały miejsca.

Oczywiście, ponieważ twoje 3 zapytania tutaj są takie same, jest to głupi przykład. Przynajmniej zmień lid zobaczyć. Dlaczego nie zrobisz szybkiego testu?

Edytuj:edytowałeś swoje pytanie dotyczące celu transakcji.

Celem transakcji jest rzeczywiście utrzymanie bazy danych w spójnym stanie (przeczytaj ACID ), ale to programista decyduje, co jest spójne. Spójrz na odpowiedź prodigitalson aby zobaczyć przykład możliwego sposobu przechwytywania błędów przez php, który robi to za Ciebie. Ale gdy jesteś w transakcji, inne procesy nie zobaczą zmian, które robi Twoja transakcja - stąd niepodzielne i izolowane.

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. phpMyAdmin - Błąd> Nieprawidłowy parametr formatu?

  2. Dane wyjściowe Pythona zastępują znaki spoza ASCII znakami �

  3. Funkcja Lead i Lag w Mysql

  4. Uzyskaj ostatnio usunięty identyfikator w MySQL

  5. MySQL Errno 150