sql >> Databáze >  >> RDS >> Mysql

Exkluzivní zámek MySQL

Ano, zamykáte všechny řádky v tabulce, když máte podmínku pro neindexovaný sloupec, jako je user_id .

Zámky se vztahují na všechny „zkoumané“ řádky. Vaše podmínka WHERE user_id = <user_id> musí prověřit vše řádky v tabulce a otestujte je jeden po druhém, abyste zjistili, zda odpovídají hodnotě <user_id> .

Oba dotazy zkoumají celou sadu řádků, i když hledají různé konkrétní hodnoty <user_id> , takže jsou v konfliktu.

Pokud jste měli index na user_id sloupec, pak by MySQL použil tento index k nalezení odpovídajících řádků nejprve, poté by se pouze odpovídající řádky staly prozkoumanými řádky, a proto by byly uzamčeny.

To nemá nic společného s úrovní izolace transakcí. Tyto typy zámků se vyskytují ve všech úrovních izolace transakcí.




  1. ON DUPLICATE KEY UPDATE implementace/návrh

  2. Plánování diskového prostoru pro databáze

  3. Počet atributů hledání tváří

  4. Odstraňte duplicitní záznamy bez vytvoření dočasné tabulky