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

MySQL Deadlock с вмъкване, което повдига тригер

Нишка 2 държи споделено заключване на реда в таблицата с потребители.

След това нишка 1 се опитва да получи изключително заключване на същия ред и преминава в изчакване на заключване.

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

Всеки от тях блокира другия.

Това е задънена улица.

Сървърът избира транзакция, която да убие, така че да не се блокират ненужно.

Откриването на застой позволява на една нишка незабавно да успее за сметка на другата. В противен случай и двамата щяха да останат затворени в изчакване, докато единият от тях умре от твърде дълго чакане.

Вие сте в режим на автоматично извършване, но разбира се, това не означава, че не сте в транзакция. Всяка заявка с InnoDB все още се обработва в транзакция, но при autocommit транзакцията се стартира имплицитно, когато заявката започне да се изпълнява, и неявно се ангажира, когато успее.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да вмъкна масив в mysql с помощта на PDO и bindParam?

  2. Изберете време между два пъти mysql

  3. Детерминистична функция в mysql

  4. Доктрина, генерираща заявка с грешен псевдоним на таблица

  5. Извикайте pusher, когато mysql се промени