sql >> Database >  >> RDS >> Mysql

SELECT FOR UPDATE met de hele tabel in MySQL in plaats van rij voor rij

Het standaard isolatieniveau voor InnoDB-tabellen is herhaalbaar gelezen. Wanneer dit isolatieniveau actief is, krijgen we het volgende gedrag (citaat van:https://dev.mysql.com/doc/refman/5.5/en/set-transaction.html ):

Met andere woorden:zou je kunnen proberen de primaire sleutel te gebruiken in de WHERE-voorwaarde van de SELECT? Dus bijvoorbeeld in plaats van:

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

Probeer:

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

voor het geval id de primaire sleutel is. Elke andere kolom met een unieke index erop zou ook werken. Bij gebruik van niet-unieke kolommen in uw WHERE-clausule zal InnoDB een reeks rijen vergrendelen.




  1. Observer Overhead en wachttype Symptomen

  2. Hoe exportuitvoer in echt CSV-formaat te krijgen in SQL Server Management Studio?

  3. T-SQL - Gegevens in bovenliggende en onderliggende tabellen invoegen

  4. Een gecrashte Innodb-tabel verwijderen