sql >> Databasteknik >  >> RDS >> Mysql

MySQL exklusivt lås

Ja, du låser alla rader i tabellen när du har ett villkor på en oindexerad kolumn som user_id .

Låsen gäller alla "undersökta" rader. Ditt villkor WHERE user_id = <user_id> måste undersöka alla raderna i tabellen och testa dem en efter en för att se om de matchar värdet på <user_id> .

Båda frågorna undersöker hela uppsättningen rader, även om de söker efter olika specifika värden för <user_id> , så de konflikter.

Om du hade ett index på user_id kolumn, då skulle MySQL använda det indexet för att hitta de matchande raderna först, sedan skulle bara matchande rader bli granskade rader och därför låsas.

Detta har ingenting att göra med transaktionsisoleringsnivån. Dessa typer av lås förekommer i alla transaktionsisoleringsnivåer.




  1. Många-till-många-relationer i MySQL

  2. paketet misslyckas - Kan inte hitta PostgreSQL-klientbiblioteket (libpq)

  3. mysql.connector.errors.InterfaceError:2026 (HY000)

  4. Hur importerar jag denna datafil till en Mysql-tabell