sql >> データベース >  >> RDS >> Mysql

mySQL-テーブルロックと行ロック

    tblAreas.AreaIDにインデックスがある場合、WHERE tblAreas.AreaID in (...)を含むトランザクション それらのエントリのインデックスをロックします。行自体が存在するかどうかは関係ありません。このロックにより、別のトランザクションがそれらのIDのエントリを挿入できなくなります。ですから、どちらの提案もする必要はないと思います。テリトリーですべてのエリアが利用可能かどうかを確認するためにクエリを実行するだけで、テリトリーをアトミックに挿入するために必要なロックが取得されます。

    エリアIDはゲーム全体で一意ではないため、これは少し問題になる可能性があります。そのため、異なるマップの同じIDを持つエリア間で誤ったシリアル化が行われる可能性があります。 mapIDをtblAreasテーブルに追加すると、代わりに(mapID、areaID)インデックスを作成して検索できるようになり、インデックスでの誤った衝突を回避できる場合があります。 (これにより、スキーマが非正規化されますが、他の理由で実行したくない場合があります。)




    1. データベースに新しい行を追加するときは、外部コマンドラインプログラムを呼び出す必要があります

    2. 4 PL/SQL匿名ブロックの例

    3. SQLクエリ少なくとも1つ

    4. Mysqldump:挿入するテーブルの名前を変更できますか?