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

MySQL InnoDB:Разлика между „ЗА АКТУАЛИЗИРАНЕ“ и „ЗАКЛЮЧВАНЕ В РЕЖИМ НА СПОДЕЛЯНЕ“

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

И двете LOCK IN SHARE MODE и FOR UPDATE уверете се, че никоя друга транзакция не може да актуализира избраните редове. Разликата между двете е в начина, по който третират заключванията, докато четат данни.

LOCK IN SHARE MODE не пречи на друга транзакция да чете същия ред, който е бил заключен.

FOR UPDATE предотвратява други заключващи четения на същия ред (незаключващите четения все още могат да четат този ред; LOCK IN SHARE MODE и FOR UPDATE са заключващи четения).

Това има значение в случаи като актуализиране на броячи, когато четете стойност в 1 оператор и актуализирате стойността в друг. Тук се използва LOCK IN SHARE MODE ще позволи на 2 транзакции да прочетат една и съща първоначална стойност. Така че, ако броячът е увеличен с 1 от двете транзакции, крайният брой може да се увеличи само с 1 - тъй като и двете транзакции първоначално четат една и съща стойност.

Използване на FOR UPDATE щеше да заключи втората транзакция от четене на стойността до приключване на първата. Това ще гарантира, че броячът се увеличава с 2.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. АКО НЕ СЪЩЕСТВУВА в тригера

  2. MySQL - Намерете точки в радиус от базата данни

  3. MySQL:SUM() с JOIN връща неправилни стойности

  4. Mysql:Задайте набор от знаци за колони

  5. PDO - Фатална грешка:Извикване на член функция fetch() на необект