C# 我应该使用哪个MySql InnoDB事务隔离级别?
我正在对MySql服务器v5.7.19使用.NET MySqlClient v6.6.4.0C# 我应该使用哪个MySql InnoDB事务隔离级别?,c#,mysql,locking,C#,Mysql,Locking,我正在对MySql服务器v5.7.19使用.NET MySqlClient v6.6.4.0 Show table Status 显示所有表都在使用InnoDB引擎 SHOW VARIABLES LIKE 'tx_isolation'; 返回 tx_isolation REPEATABLE-READ 我的问题很简单 我有一个单独的流程,每分钟都会执行以下操作 Open a database connection Begin a Transaction (using default
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行
相反,我发现读者并没有阻止和接收到任何已经写过的东西
我需要什么样的隔离级别,以便在填充表时读卡器阻塞并接收完整的数据集?因此,我不会更改事务隔离级别。我宁愿使用明确的: 持有锁的会话可以读取和写入表 只有持有锁的会话才能访问表。没有别的 会话可以访问它,直到释放锁 写入时,其他会话阻塞对表的锁定请求 锁被锁住了 由于lock和unlock table语句在给定sesion中提交任何打开的事务,因此您需要小心使用它们。Mysql在上面的链接中提供了以下示例:
SET autocommit=0;
LOCK TABLES t1 WRITE;
... do something with table t1 here ...
COMMIT;
UNLOCK TABLES;
“我需要什么样的隔离级别,以便在填充表并接收完整数据集时读卡器阻塞?”没有这样的隔离级别。“取而代之的是,我发现读卡器不会阻塞并接收已写入到该点的任何内容。”这就是逻辑SQL,根据定义,它或多或少是FIFO。也就是说,如果您想创建阻塞客户端,您可以使用它来检查循环中是否正在运行事务,并在没有更多事务时进行选择。。。唯一的问题是您无法知道涉及哪些表,它只有一个查询(
trx\u query
field),您需要解决它。。如果使用别名而不是表名,则可以使用获取已用表的唯一问题。