Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.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中的多个并发SELECT语句_C#_Mysql_Mysql Connector - Fatal编程技术网

C# MySQL中的多个并发SELECT语句

C# MySQL中的多个并发SELECT语句,c#,mysql,mysql-connector,C#,Mysql,Mysql Connector,我试图获取MySQL数据库中两次更改的快照。我有许多不同实体的表,每个表都有一个“Last Updated”列,当一行被更新时,该列会自动设置为当前日期 我有一个客户端应用程序,它使用多个SELECT语句(数据库中每个表一个语句)查询数据库,查询任何有“应用程序的上一个同步时间”的行,您应该使用事务。不是在客户端应用程序上,而是在服务器应用程序上 begin transaction update table1 set .... update table2 set .... update tabl

我试图获取MySQL数据库中两次更改的快照。我有许多不同实体的表,每个表都有一个“Last Updated”列,当一行被更新时,该列会自动设置为当前日期


我有一个客户端应用程序,它使用多个SELECT语句(数据库中每个表一个语句)查询数据库,查询任何有“应用程序的上一个同步时间”的行,您应该使用事务。不是在客户端应用程序上,而是在服务器应用程序上

begin transaction
update table1 set ....
update table2 set ....
update table2 set ....
commit
通过这种方式,table1和table2可以同时提交,确保客户端应用程序上的一致读取


注意:您必须使用InnoDB引擎才能使事务正常工作

您是否尝试过锁定和解锁表?因此,我将执行如下操作:锁定表表表1读取,表2读取;从表1中选择*;从表2中选择*;解锁表格?这会阻止其他连接写入这些表吗?如果有人试图在锁着的时候写东西会怎么样?它只是等待还是导致错误?它将生成锁定错误。您可能希望首先在测试环境中执行此操作,然后在进行实时备份之前进行备份。无论您做什么,1)首先备份2)测试环境(如果可能)。表锁仅能防止其他会话进行不适当的读取或写入。持有锁(甚至是读锁)的会话可以执行表级操作,如DROP table。截断操作不是事务安全的,因此如果会话在活动事务期间或持有表锁时尝试截断操作,则会发生错误。
string commandString = "SELECT * FROM Table1; SELECT * FROM Table2;";
using (MySqlCommand command = new MySqlCommand(commandString, connection))
 using (MySqlDataReader reader = command.ExecuteReader())
 {
     do
     {
        if (reader.HasRows)
        {
             //....
        }         
     } while (reader.NextResult());
 }
begin transaction
update table1 set ....
update table2 set ....
update table2 set ....
commit