sql >> Database teknologi >  >> RDS >> Mysql

MySQL eksklusiv lås

Ja, du låser alle rækkerne i tabellen, når du har en betingelse på en uindekseret kolonne som user_id .

Låsene gælder for alle "undersøgte" rækker. Din betingelse WHERE user_id = <user_id> skal undersøge alle rækkerne i tabellen, og test dem én efter én for at se, om de matcher værdien af ​​<user_id> .

Begge forespørgsler undersøger hele sættet af rækker, selvom de søger efter forskellige specifikke værdier af <user_id> , så de er i konflikt.

Hvis du havde et indeks på user_id kolonne, så ville MySQL bruge det indeks til at finde de matchende rækker først, derefter ville kun matchende rækker blive undersøgte rækker og derfor blive låst.

Dette har intet at gøre med transaktionsisolationsniveauet. Disse typer låse forekommer i alle transaktionsisolationsniveauer.




  1. mysql fix ugyldige datoer

  2. Er mysql_real_escape_string() brudt?

  3. Vælg den seneste række for hver gruppe fra oracle

  4. SUM(underforespørgsel) i MYSQL