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

zamyká to databázi?

Pro mě je dokumentace trochu nejasná:

Metody vnitřního zamykání navrhuje, že za určitých okolností je možné vložit do tabulky MyISAM, když z ní čte jiná relace:

Nicméně Problémy se zamykáním tabulek ukazuje situaci, kdy bude tabulka uzamčena, dokud nebude SELECT dokončen (to odpovídá vaší situaci):

Tabulka InnoDB implementuje zámky na úrovni řádků, takže bude uzamčen pouze čtený řádek, nikoli celá tabulka.

Spíše než se spoléhat jen na dokumentaci, zkusil jsem malý test:

  1. Vytvořte dvě tabulky se stejnou strukturou:table_a a table_b .
  2. Vyplňte table_a s 500 000 řádky.
  3. Zkopírujte data z table_a na table_b pomocí INSERT INTO ... SELECT prohlášení.
  4. Během procesu kopírování použijte jinou relaci k vložení nového řádku do table_a .
  5. Zkontrolujte, zda table_b obsahuje nový záznam.

Když obě tabulky obsahují MyISAM, table_b neobsahoval nový záznam po kopii. Když obě tabulky obsahují InnoDB, table_b obsahoval nový záznam po kopii. Opakoval jsem to třikrát a podle očekávání byl výsledek pokaždé stejný.

Stručně řečeno, pokud je váš stůl MyISAM, bude uzamčen. Pokud je to InnoDB, nebude. Tento test samozřejmě nezohledňuje aktualizace, ale očekávám, že výsledky budou podobné.




  1. Jak mohu zpracovat dotazy na překrytí polygonů MySQL?

  2. Připojení Heroku k RDS pomocí MySql2

  3. Instalace rozšíření PostgreSQL do všech schémat

  4. Jak mohu vložit obrázek do databáze sqlite