sql >> Database >  >> RDS >> Mysql

Exclusief MySQL-slot

Ja, je vergrendelt alle rijen in de tabel als je een voorwaarde hebt voor een niet-geïndexeerde kolom zoals user_id .

De vergrendelingen zijn van toepassing op alle "onderzochte" rijen. Uw voorwaarde WHERE user_id = <user_id> moet alles onderzoeken de rijen in de tabel en test ze een voor een om te zien of ze overeenkomen met de waarde van <user_id> .

Beide zoekopdrachten onderzoeken de hele reeks rijen, ook al zoeken ze naar verschillende specifieke waarden van <user_id> , dus ze conflicteren.

Als u een index had op de user_id kolom, dan zou MySQL die index gebruiken om eerst de overeenkomende rijen te vinden, waarna alleen overeenkomende rijen onderzochte rijen zouden worden en daarom zouden worden vergrendeld.

Dit heeft niets te maken met het transactie-isolatieniveau. Dit soort vergrendelingen komen voor in alle transactie-isolatieniveaus.




  1. MySQL:Hoeveel queries per pagina is te veel?

  2. Verhoog en verlaag de rijwaarde met 1 in MySQL

  3. Doctrine querybuilder DATE_FORMAT werkt niet

  4. mysqldump test vergrendelingstabellen