mysql 分布式事务_MySql分布式事务支持情况

MySQL Connector/Net -- Mysql.data.MySqlClient需要使用5.2.3版,之前版本对分布式事务支持存在bug。

1. 测试同一个链接字符串执行多个命令。

stringmySqlConnString1="server=localhost;uid=root;database=test;Pwd=1234;";stringmySqlConnString2="server=127.0.0.1;uid=root;database=test;Pwd=1234;";stringinsertSql="insert into users(userId, userName) values ('{0}','{1}')";

[Test]publicvoidTestDTC()

{using(TransactionScope scope=newTransactionScope())

{

// 执行相同的语句,第二句会引发主键冲突异常                MySqlExecuteNonQuery(mySqlConnString1,string.Format(insertSql,"Id1","Name1"));

MySqlExecuteNonQuery(mySqlConnString1,string.Format(insertSql,"Id1","Name1"));

scope.Complete();

}

}voidMySqlExecuteNonQuery(stringconnString,stringsql)

{using(MySqlConnection cnx=newMySqlConnection(connString))

{

MySqlCommand cmd=newMySqlCommand(sql, cnx);

cnx.Open();

cmd.ExecuteNonQuery();

cnx.Close();

}

}

结果数据库全部没有任何更新。测试通过。

2. 测试在同一个数据库两个不同的链接字符串上执行命令

[Test]publicvoidTestDTC()

{using(TransactionScope scope=newTransactionScope())

{

MySqlExecuteNonQuery(mySqlConnString1,string.Format(insertSql,"Id1","Name1"));

MySqlExecuteNonQuery(mySqlConnString2,string.Format(insertSql,"Id1","Name1"));

scope.Complete();

}

}

引发异常:Multiple simultaneous connections or connections with different connection strings inside the same transaction are not currently supported.

3.在多个数据库之间执行事务

一个MySql连接,一个SQLServer连接

stringmySqlConnString1="server=localhost;uid=root;database=test;Pwd=1234;";stringsqlSvrConnString1=@"server=(local);uid=sa;Pwd=sa;database=pubs;";stringinsertSql="insert into users(userId, userName) values ('{0}','{1}')";

[Test]publicvoidTestDTC()

{using(TransactionScope scope=newTransactionScope())

{

SqlServerExecuteNonQuery(sqlSvrConnString1,string.Format(insertSql,"Id1","Name1"));

MySqlExecuteNonQuery(mySqlConnString2,string.Format(insertSql,"Id1","Name1"));

scope.Complete();

}

}voidMySqlExecuteNonQuery(stringconnString,stringsql)

{using(MySqlConnection cnx=newMySqlConnection(connString))

{

MySqlCommand cmd=newMySqlCommand(sql, cnx);

cnx.Open();

cmd.ExecuteNonQuery();

cnx.Close();

}

}

voidSqlServerExecuteNonQuery(stringconnString,stringsql)

{using(SqlConnection cnx=newSqlConnection(connString))

{

SqlCommand cmd=newSqlCommand(sql, cnx);

cnx.Open();

cmd.ExecuteNonQuery();

cnx.Close();

}

}

引发异常:MySQL Connector/Net does not currently support distributed transactions.

结论:MySql目前版本(MySql5.0, MySQL Connector/Net 5.2.3)支持同一个连接字符串内多个连接实例的事务,不支持不同连接字符串以及不同数据库之间的事务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值