对于传统oracle 业务改用mysql 我们需要思考的几个mysql db 特性问题

1、MySQL数据库innodb_rollback_on_timeout默认值的危害?
这是官方文档对innodb_rollback_on_timeout的解释:

在MySQL 5.6&5.7中默认值为OFF,当InnoDB默认情况下仅回滚事务超时的最后一条语句。
如果innodb_rollback_on_timeout值为ON,则事务超时后将导致InnoDB中止并回滚整个事务

问题:innodb_rollback_on_timeout为OFF,事务的原子性被破坏了吗?
答:NO,从示例中可以看到,事务只是回退上一条语句的状态,而整个事务实际上没有完成(提交或者回滚),
而作为应用程序在检测这个错误时,应该选择是提交或者回滚事务。如果严格要求事务的原子性,当然是执行ROLLBACK,回滚事务。



2、mysql 默认事务隔离级别是rr,会有next-key lock,目的是为了解决幻读?
select * from lixora where a>100  for  update ;会造成 100 以后的记录全部锁定;无法insert

是否改成rc 模式;

oracle 是rc ,且没有机制保障幻读;除非用户加自定义锁;






持续待补充。。。

猜你喜欢

转载自blog.csdn.net/royjj/article/details/80898858