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

ИЗБЕРЕТЕ и заключете ред и след това АКТУАЛИЗИРАНЕ

Това, което трябва да направите, е да добавите някакъв вид заключване тук, за да предотвратите условия на състезание като това, което сте създали:

UPDATE persons SET processing=1 WHERE id=:id AND processing=0

Това ще избегне двойното му заключване.

За да подобрите това още повече, създайте колона за заключване, която можете да използвате за искане:

UPDATE persons
  SET processing=:processing_uuid
  WHERE processing IS NULL
  LIMIT 1

Това изисква VARCHAR , индексирана processing колона, използвана за заявяване, която има стойност по подразбиране NULL . Ако получите ред, променен в резултатите, вие сте заявили запис и можете да работите с него, като използвате:

SELECT * FROM persons WHERE processing=:processing_uuid

Всеки път, когато се опитате да поискате, генерирайте нов UUID ключ за искане.



  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 търсене, чувствително към главни букви (използвайки хибернация) за utf8

  2. GET параметрите са уязвими към SQL инжекция - PHP

  3. качване на множество изображения с помощта на цикъл foreach и вмъкване в база данни

  4. Изберете част от MySQL Blob поле

  5. Проверете дали IP е в подмрежата