Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该使用哪个MySql InnoDB事务隔离级别?_C#_Mysql_Locking - Fatal编程技术网

C# 我应该使用哪个MySql InnoDB事务隔离级别?

C# 我应该使用哪个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

我正在对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 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),您需要解决它。。如果使用别名而不是表名,则可以使用获取已用表的唯一问题。