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

SELECT FOR UPDATE, като държите цялата таблица в MySQL, а не ред по ред

Нивото на изолация по подразбиране за InnoDB таблици е повтарящо се четене. Когато това ниво на изолация е активно, получаваме следното поведение (цитат от:https://dev.mysql.com/doc/refman/5.5/en/set-transaction.html ):

С други думи:бихте ли опитали да използвате първичния ключ в условието WHERE на SELECT? Така например вместо:

START TRANSACTION;
SELECT * FROM productMacAddress WHERE status='free' limit 8 FOR UPDATE;

Опитайте:

START TRANSACTION;
SELECT * FROM productMacAddress WHERE id=10 FOR UPDATE;

в случай че id е първичният ключ. Всяка друга колона с уникален индекс ще работи също. Когато използвате неуникални колони във вашата клауза WHERE, InnoDB ще заключи диапазон от редове.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как избирате всеки n-ти ред от mysql

  2. Изберете в MySQL, където всички редове отговарят на условие

  3. Заявката конкатенира всичко в един ред, а не в отделни редове

  4. Разлики между DATA INFILE и LOAD DATA LOCAL INFILE

  5. Как да изберете отделни редове, без да използвате група по оператор