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

Заключване на реда за избор на MySQL, докато не се изпълни UPDATE?

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

Уверете се, че имате индекс на колоните, които тествате в WHERE клауза, така че няма да се налага да прави сканиране и да заключва всички редове, които е проверил, преди да намери този, който искате.

START TRANSACTION;

SELECT @id := `id`,`item` 
FROM `queue_items` 
WHERE `processed_at` IS NULL AND `completed_at` IS NULL 
ORDER BY `id` ASC 
LIMIT 1
FOR UPDATE;

UPDATE `queue_items` SET `processed_at` = @processedAt WHERE `id` = @id

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. Ще се използват ли индексите, ако направите заявка за подмножество от колоните на индекса?

  2. Вярно/Невярно срещу 0/1 в MySQL

  3. Въпрос за производителност:НА АКТУАЛИЗИРАНЕ НА ДУБЛИРАН КЛЮЧ срещу АКТУАЛИЗИРАНЕ (MySQL)

  4. Rails, MySQL и Snow Leopard

  5. Най-добрият начин за валидиране на потребителския вход JDBC?