mysql back blog_MySQL的indb_lock_wait_timeout,innodb_rollback_on_timeout

indb_lock_wait_timeout

1、作用

它只针对 行锁(row lock),不同事务同时更新同一行的时候,等待其他事务提交的时间,所以一个事务中如果新增数据,那么不会受到事务超时影响。

2、变量说明

(1)变量说明

innodb_lock_wait_timeout(超时时间),事务等待行锁的时间。默认是50s.

(2)查看上面的两个变量show variables like '%timeout%'

如下结果

70c2f2ca28c488de14c281836120a8f7.png

(3)设置超时变量

1.通过语句修改set innodb_lock_wait_timeout=100;

set global innodb_lock_wait_timeout=100;

注意: global的修改对当前线程是不生效的,只有建立新的连接才生效

2. 修改my.cnf

在[mysqld] 下添加innodb_lock_wait_timeout = 120

更改完成需要重启下服务

innodb_rollback_on_timeout

1、作用

事务中每执行一个sql语句(一个satement)就有一个保存点, 在锁等待超时后是回滚事务内所有的statement还是最后一条语句;

2、变量说明

(1)变量说明

0表示rollback最后一条语句,默认值;

1表示回滚事务B内所有的statements;

(2)修改值

修改my.cnf

在[mysqld] 下添加innodb_rollback_on_timeout=1

需要重启服务

验证

表:CREATE TABLE `Student`  (

`s_id` varchar(20) CHARACTER SET utf8 COLLATE utf8_german2_ci NOT NULL,

`s_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_german2_ci NOT NULL DEFAULT '',

`s_birth` varchar(20) CHARACTER SET utf8 COLLATE utf8_german2_ci NOT NULL DEFAULT '',

`s_sex` varchar(10) CHARACTER SET utf8 COLLATE utf8_german2_ci NOT NULL DEFAULT '',

PRIMARY KEY (`s_id`) USING BTREE

) ENGINE = InnoDB CHARACTER SET = utf8

1、超时回滚所有

innodb_lock_wait_timeout = 10

innodb_rollback_on_timeout=1

1.1、不发生事务超时的情况

af7efb06eada6fa2f2c52db2a11c650e.png

44c26b7a2afce9b1dac7ec614ca9028c.png7bb1ea5b1d9a7736d1033cebee4a0af9.png

1.2、发生事务超时

96a80d5f5c719b77b4855161eae5b5f5.png

4e5a510e033e8be0a860ea77bbc6bf7c.png

2e03f8f9c0526f890040c815a579242a.png

表结果:

7693c3caf9e7f1fe5571910af7ea1a79.png

2、超时回滚最后一条

innodb_lock_wait_timeout = 10

innodb_rollback_on_timeout=0

把表中数据的生日还原成90年的,重复  发生事务超时  时的步骤,最终结果

49f379a06493cc44d4dbcf17e6b338e4.png

如预期一样: 事务2发生超时时,只会回滚了修改02数据的那条SQL,所以最终提交事务时,03 被次改成了95年的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值