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

mySQL - zamykání tabulek vs zamykání řádků

Pokud máte index na tblAreas.AreaID, pak jakákoli transakce, která obsahuje WHERE tblAreas.AreaID in (...) zamkne rejstřík pro tyto položky. Nezáleží na tom, zda řádky samotné existují nebo ne. Tento zámek zabrání další transakci ve vložení jakýchkoli položek pro tato ID. Takže si myslím, že ani jeden z vašich návrhů nemusíte dělat. Pouhým dotazem, zda jsou pro vaše území dostupné všechny oblasti, získáte zámky, které potřebujete k atomickému vložení vašeho území.

To může být trochu problém, protože vaše ID oblastí nejsou jedinečné pro celou hru, takže mezi oblastmi se stejným ID na různých mapách může docházet k nesprávné serializaci. Mohlo by pomoci přidat mapID do vaší tabulky tblAreas, abyste mohli vytvořit index (mapID, areaID), který by místo toho vyhledával, což by předešlo falešným kolizím v indexu. (To by denormalizovalo vaše schéma, což možná nebudete chtít dělat z jiných důvodů.)




  1. Načtěte databázi nebo jakýkoli jiný soubor z interního úložiště pomocí run-as

  2. Jaké jsou výhody a nevýhody ponechání SQL v uložených procesech versus kód

  3. Jak efektivně převést long int na tečkovanou quad IP v bash

  4. Jak zacházet s volitelnými parametry v dotazu SQL?