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

SELECT FOR UPDATE podržte celou tabulku v MySQL spíše než řádek po řádku

Výchozí úroveň izolace pro tabulky InnoDB je opakovatelné čtení. Když je tato úroveň izolace aktivní, dochází k následujícímu chování (citace:https://dev.mysql.com/doc/refman/5.5/en/set-transaction.html ):

Jinými slovy:mohli byste zkusit použít primární klíč v podmínce WHERE SELECT? Takže například místo:

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

Zkuste:

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

v případě, že id je primární klíč. Fungoval by i jakýkoli jiný sloupec s jedinečným indexem. Při použití nejedinečných sloupců v klauzuli WHERE InnoDB uzamkne řadu řádků.




  1. Jak spočítat počet řádků v tabulce v SQL

  2. jak zjistit, kdy je hotový mysql INSERT (více připojení)

  3. mysql, výpis, obnovení databáze

  4. Emulace transakčně bezpečné SEKVENCE v MySQL