各位小伙伴有没遇到这个奇葩情况:业务逻辑对两个表加了事务操作,A表的存储引擎是InnoDB
,B表的存储引擎却是MyISAM
。事务要回滚时,麻烦就来了hhh,B表它回滚不了,那小伙伴打算要怎么处理~
面试官:事务的特性你说一说?
好的面试官。事务有四大特性。
面试官:隔离性有多种隔离级别,这个知道吧?
知道的,SQL标准定义了四种隔离级别,较低级别的隔离通常来说系统开销更低些。
MySQL
默认的事务隔离级别。SQL
超时。面试官:幻读是什么问题?还有其他事务问题吗?
并发事务带来的问题主要有四种,可以用上面我们谈到的事务隔离级别来处理,我都说下吧。
面试官:那幻读要怎么解决?
可以采用我提到的SERIALIZABLE
(可串行化)隔离级别来解决幻读,事务按顺序执行,也就不会有幻读问题。
MySQL也提供了其他方法来处理幻读问题。
面试官:事务加锁会导致死锁,要怎么处理?
是这样的,死锁是因为多个事务互相占用对方请求的资源导致的现象,要打破这个问题需要回滚其中一个事务,这样另一个事务就能获得请求资源了,而回滚的事务只需要重新执行即可。
InnoDB引擎目前处理死锁的方法是通过持有行级排他锁的数量来判断,持有最少行级排他锁的事务会进行回滚。
面试官:有去看看你们数据库用的什么隔离级别吗?
有的,MySQL默认隔离级别是可重复读,企业生产一般也是用的这个隔离级别。
查看隔离级别的指令:
select @@tx_isolation
设置隔离级别为可重复读的指令:
set session transaction isolation level repeatable read
我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!
🌱以【面试官面试】形式覆盖Java程序员所需掌握的Java核心知识、面试重点,本博客收录在我开源的《Java学习指南》中,会一直完善下去,希望收到大家的 ⭐ Star ⭐支持,这是我创作的最大动力: https://github.com/hdgaadd/JavaGetOffer
创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。