MySQLでロックを発生させずに選択する方法はありますか? 質問する

MySQLでロックを発生させずに選択する方法はありますか? 質問する

クエリ:

SELECT COUNT(online.account_id) cnt from online;

しかし、オンライン テーブルもイベントによって変更されるため、 を実行するとロックが発生することがよくありますshow processlist

MySQL には、ロックを引き起こさない select ステートメントを作成できる文法はありますか?

また、上記で言及し忘れましたが、これは MySQL スレーブ データベース上にあります。

my.cnf:transaction-isolation = READ-UNCOMMITTEDスレーブに追加した後、エラーが発生します:

エラー「バイナリ ロギングは不可能です。メッセージ: InnoDB のトランザクション レベル「READ-UNCOMMITTED」は、クエリのバイナリログ モード「STATEMENT」では安全ではありません」

それで、これを実行するための互換性のある方法はあるのでしょうか?

ベストアンサー1

「MYSQL WITH NOLOCK」というタイトルの記事を見つけました

https://web.archive.org/web/20100814144042/http://sqldba.org/articles/22-mysql-with-nolock.aspx

MS SQL Server では次の操作を実行します。

SELECT * FROM TABLE_NAME WITH (nolock)

MYSQLの同等品は

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;

編集

マイケル・ミオール以下を提案しました(コメントより)

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
COMMIT ;

おすすめ記事