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

Změňte stůl bez uzamčení celého stolu

Krátká odpověď:Pro MySQL <5.6 jsou vyžadovány zámky. Od verze 5.6 a pomocí InnoDB se uzamyká nejsou vyžadovány pro mnoho ALTER TABLE operace včetně přidání sloupce .

Pokud používáte MySQL 5.5 nebo starší, získá zámek čtení pro celou operaci a poté krátký zámek na konci.

Z dokumentace MySQL pro ALTER TABLE ...

Což znamená, že při přidávání sloupce se při čtení uzamkne tabulka po většinu operace a poté se na konci dostane zámek pro zápis.

MySQL 5.6 přidal Online DDL na InnoDB, což urychluje a zlepšuje mnoho věcí, jako je změna tabulek a indexů. Přidání sloupce do tabulky již nebude vyžadovat zámky tabulky s výjimkou případných krátkých výhradních zámků na začátku a na konci operace .

mělo by proběhne automaticky, ale pro jistotu nastavte ALGORITHM=inplace a LOCK=none do vaší ALTER TABLE prohlášení.

Existuje jedna výjimka...




  1. Existuje mysql JDBC, který bude respektovat fetchSize?

  2. Jak získat seznam databází?

  3. Chyba při načítání ovladače QMYSQL

  4. Převod číslic/čísel ve slovech pro měnu INR (indické rupie) v Oracle PL/SQL