我使用.NET MySqlClient v6.6.4.0来对付MySql服务器5.7.19
Show table Status 显示所有表都使用InnoDB引擎。
SHOW VARIABLES LIKE 'tx_isolation';返回
tx_isolation REPEATABLE-READ我的问题很简单。
我有一个过程,它每分钟执行以下操作
Open a database connection
Begin a Transaction (using default isolation mode of RepeatableRead)
Delete all rows from a table
Insert a bunch of rows - at least 50 or 60
Commit transaction
Close connection我还拥有多个独立的进程,它们可以在任何时候查询该表。
我预计,如果在事务范围内写入表时对其进行查询,则读取器将阻塞直到事务完成,然后取回所有50或60行。
相反,我发现读者并没有阻止和接收到这一点之前已经写好的东西。
我需要什么隔离级别,以便在填充表并接收完整数据时,读取器阻塞?
发布于 2019-01-11 23:52:45
因此,我不会更改事务隔离级别。我宁愿使用显式表写锁
持有锁的会话可以读取和写入表。 只有持有锁的会话才能访问表。在释放锁之前,其他会话都不能访问它。 在保留写锁时,通过其他会话块锁定表请求。
因为锁和解锁表语句在给定的集合中提交了任何打开的事务,所以您需要小心使用它们。Mysql在上面的链接中提供了以下示例:
SET autocommit=0;
LOCK TABLES t1 WRITE;
... do something with table t1 here ...
COMMIT;
UNLOCK TABLES;https://stackoverflow.com/questions/54155180
复制相似问题