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

Mysql vybrat pro aktualizaci - nezamyká cílové řádky. Jak se ujistím, že ano?

A SELECT FOR UPDATE uzamkne řádek, který jste vybrali pro aktualizaci, dokud neskončí vámi vytvořená transakce. Ostatní transakce mohou tento řádek pouze číst, ale nemohou jej aktualizovat, dokud je stále otevřená transakce výběru pro aktualizaci.

Chcete-li zamknout řádek(y):

START TRANSACTION;
SELECT * FROM test WHERE id = 4 FOR UPDATE;
# Run whatever logic you want to do
COMMIT;

Výše uvedená transakce bude aktivní a uzamkne řádek, dokud nebude potvrzena.

Chcete-li to otestovat, existují různé způsoby. Testoval jsem to pomocí dvou instancí terminálu s klientem MySQL otevřeným v každé z nich.

Na first terminal spustíte SQL:

START TRANSACTION;
SELECT * FROM test WHERE id = 4 FOR UPDATE;
# Do not COMMIT to keep the transaction alive

Na second terminal můžete zkusit aktualizovat řádek:

UPDATE test SET parent = 100 WHERE id = 4;

Protože vytvoříte volbu pro aktualizaci na first terminal výše uvedený dotaz počká, dokud nebude potvrzena transakce výběru pro aktualizaci, nebo vyprší časový limit.

Vraťte se na first terminal a potvrďte transakci:

COMMIT;

Zkontrolujte second terminal a uvidíte, že aktualizační dotaz byl proveden (pokud nevypršel časový limit).




  1. Jak monitorovat více instancí MySQL běžících na stejném počítači – tipy a triky ClusterControl

  2. dbms_lob.getlength() vs. length() k nalezení velikosti blob v oracle

  3. Jak sledovat, co uživatelé dělají

  4. Přírůstkové statistiky SQL Server 2014