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

Po vypuštění tabulky se MySQL zasekne

Waiting for table metadata lock
drop table tableA name

SELECT l1.lat, l1.lon, l2.zipcode FROM tableA l1, tableBl2 where l1.lat = l2.latitude and l1.lon = l2.longitude limit 10

Pokud je toto váš stůl, přejděte na tento odkaz

máte implicitní zablokování. Zabijte ostatní transakce, abyste uvolnili drop, nebo zabijte drop, abyste uvolnili ostatní transakce.

Můžete použít KILL thread_id, v sql_plus.

Přidávám další informace, protože jsem přišel s další zajímavou zkušeností.

Metadata K mrtvým zámkům může stejně dojít mezi operací ddl na dané tabulce (drop , alter ...) a výběr dotaz na tu tabulku.

Ano, select .

Pokud tedy přejdete přes kurzor v mysql (nebo php, například pomocí pdo::fetch ) a spustíte příkaz ddl na stejné tabulce (tabulkách), dostanete se do uváznutí.

Jedním z řešení tohoto atypického scénáře je uvolnění implicitních zámků pomocí commit příkaz systematicky po úplném načtení jakéhokoli příkazu select.



  1. Jak vložit/aktualizovat větší velikost dat v tabulkách Oracle?

  2. Rozšíření mysql je zastaralé a bude v budoucnu odstraněno:použijte místo něj mysqli nebo PDO

  3. SQL RANK() versus ROW_NUMBER()

  4. Mám předat svou proměnnou $ mysqli každé funkci?