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

ЗА АКТУАЛИЗИРАНЕ v/s ЗАКЛЮЧВАНЕ В РЕЖИМ НА СПОДЕЛЯНЕ:Позволете на едновременните нишки да четат актуализираната стойност на състоянието на заключения ред

ЗАКЛЮЧВАНЕ В РЕЖИМ НА СПОДЕЛЯНЕ ще позволи на 2-ра нишка да прочете стойността, но действителната стойност ще бъде тази преди заявката (прочетено е ангажирано) или преди транзакцията (повтарящо се четене) да бъде стартирана (тъй като MySQL използва мултиверсии; и какво трябва да се види от втората транзакция се определя от нивото на изолация). Така че, ако първата транзакция не е ангажирана в момента на четене, старата стойност ще бъде прочетена.

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

Втората нишка транзакция с select for update ще изчака първата да завърши, след това ще прочете действителната стойност и ще реши да не продължи с другите транзакции, а да информира потребителя, че записът е заключен.

За да избегнете блокиране, уверете се, че правите select for update използвайки уникален индекс.

Примерен код:

connection.setautocommit(false);
//transaction-1
PreparedStatement ps1 = "Select locked from tableName for update where id="key" and   locked=false);
ps1.executeQuery();

//transaction 2
PreparedStatement ps2 = "Update tableName set locked=true where id="key";
ps2.executeUpdate();
connection.setautocommit(true); // here we allow other transactions / threads to see the new value

connection.setautocommit(false);
//transaction 3
PreparedStatement ps3 = "Update tableName set aField="Sthg" where id="key" And date="D" and topic="T";
ps3.executeUpdate();

// probably more queries

// reset locked to false
 PreparedStatement ps4 = "Update tableName set locked=false where id="key";
ps4.executeUpdate();

//commit
connection.setautocommit(true);



  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 данни, но уникален курорт

  2. Несъответствие между стойностите за DATETIME в базите данни H2 и MySQL, вмъкнати от Java/Kotlin

  3. Как да инсталирам MySQLdb (библиотека за достъп до данни на Python към MySQL) на Mac OS X?

  4. PHP mysql търси множество таблици с помощта на ключова дума

  5. Проблем с MySQL Daemon Lock