mysql 隔离价格 死锁_MySQL:事务隔离级别,死锁

我的导入产品的过程很漫长,有时会出现死锁错误.据我所知,我认为如果在脚本执行过程中将隔离级别切换为“可序列化”,那么我将解决死锁问题.但是,我该怎么办,我可以打开2个终端并使用Serializable重现死锁.

conn1: SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALAZIBLE;

conn1: START TRANSACTION;

conn2: START TRANSACTION;

conn1: UPDATE core_config_data set value = 1 WHERE config_id = 1;

conn2: UPDATE core_config_data set value = 1 WHERE config_id = 2;

conn1: UPDATE core_config_data set value = 1 WHERE config_id = 2; waiting...

conn2: UPDATE core_config_data set value = 1 WHERE config_id = 1; ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

好的,在我尝试使用READ UNCOMMITED进行脏读时:

conn1: SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

conn1: START TRANSACTION;

conn1: SELECT junk FROM employees WHERE employee_id = 1; junk=test;

conn2: START TRANSACTION;

conn2: update employees set junk='test1' where employee_id = 1;

conn1: SELECT junk FROM employees WHERE employee_id = 1; junk=test;

你知道我弄错了吗?

解决方法:

一切都如预期.您根本无法仅凭隔离级别来避免死锁.隔离级别仅用于确保数据的完整性.

您可以通过确保更新行的顺序相同来解决许多死锁问题.这样,第一个连接将能够处理到最后而不会出现死锁,然后连接2也将失败或成功.

标签:isolation-level,transactions,database-deadlocks,mysql

来源: https://codeday.me/bug/20191121/2052806.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值