事务回滚失效的bug?有没有大佬帮忙看下,不晓得哪里出了问题。。

hy739455177 · · 3095 次点击
更多评论
你应该使用conn来执行Exec,而不是对应的database,database执行Exec的时候,是从连接池里随机取一个来执行的,只有Begin函数返回的conn是固定的那个连接。 你这代码就是在A连接Begin,B连接执行语句,然后A连接执行rollback,当然回滚不成功。
#1
slclub
坚持就是胜利
### 修改 直接使用 conn.Exec(sql) ### 连接数据库,可以有很多连接; 这些连接一般是tcp长连接、或者短连接、这需要看具体的driver库实现了 database.Begin()获取的conn 和 database.Exec() 它们所使用的数据库连接不一定是一个,数据库上也就不在一个process线程里, 也就是插入语句和回滚在两个连接上传递给mysql的。mysql当并发了,rollback没有回滚任何执行过的sql-报错;
#2