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

c#.netでBeginTransactionMySqlトランザクションの後にテーブルをロックする

    BeginTransactionは、「トランザクションが開始され、すべてがロックされている」という意味ではありません。これは、トランザクションを開始する意図と、これから行う必要のあるすべてのことをアトミックと見なす必要があることをRDBMSに通知するだけです。

    これは、BeingTransactionを呼び出すことができ、データベース内のすべてのテーブルからすべてのデータを削除できることを意味します。RDBMSはそれを喜んで許可します。うまくいけば、DBへの接続が開いているので、DBを削除させてはいけませんが、最近はわかりません。私が知らない文書化されていない機能があるかもしれません。

    アトミックとは、アクションまたは一連のアクションを1つとして実行する必要があることを意味します。それらのいずれかが失敗した場合、それらすべてが失敗します。それはすべてか無かの概念です。

    テーブルに3つの行を挿入しているようです。テーブルが空であるか、行数が非常に少ない場合、RDBMSのLOCK ESCALATIONルールによっては、テーブル全体がロックされる可能性があります。ただし、それが大きいテーブル、非常に大きいテーブル、またはパーティション化されたテーブルの場合、LOCKエスカレーションルールはテーブルロックを保証しない場合があります。そのため、複数のトランザクションが同時にテーブルに行を挿入する可能性があります。それはすべて、RDBMSがこの状況をどのように処理するか、およびデータモデルがどのように構造化されているかに依存します。

    今あなたの質問に答えるために:

    ヒント-データの挿入を開始する前に、テーブル全体をロックする方法を探してください。

    ただし、これは通常は良くありませんが、合理的な理由があると思います。

    これがお役に立てば幸いです。




    1. sql jdbc getgeneratedkeysは、列IDが見つからない、列タイプが不明であることを返します

    2. Flask、Jquery、Javascript、MySQLを使用したオートコンプリート

    3. 同じクエリ内の複数のテーブルのALTER列

    4. MSSQLServerの最後に挿入されたID