程序员面试宝典之Mysql数据库Innodb引擎的4个隔离级别

程序员面试宝典之Mysql数据库Innodb引擎的4个隔离级别,第1张

题目宏晌:请阐述Mysql Innodb引擎的4个隔离级别

难度:三星

面试频率:五星

这道题真的是一道数据库的高频题,数据库题除了索引的原理之外就是这道题的面试频率最高。

1.Read uncommitted(读未提交):蔽樱锋,最低的隔离级别,可以一个事务读到其他事务没有提交的数据,也称脏读,这个隔离级别很少人用

2.Read committed(读已提交):相比于读未提交,这个隔离级别只能读到其他事物已经提交了的数据,这个隔离级别用得比较多。但是不是Mysql默认的隔离级别

3.Repeatable read(可重复读): 在读已提交隔离级别中,2次读取同一个变量如果其他事务修改了它的值,会读到的不一样。而在这个隔离级别中,顾名思义,一个事务开始读了。多次读到的值可以保证是一样的

4.Serializable 序列化 在这个隔离级别下,所有的事务都将串行 *** 作,是隔离级别最高的也是效率最低的,很少人用

面试官追问:Innodb引擎默认隔离级别是哪个

答:可重复读

面试官追问:可重复读的实现原理

答:使用了MVCC多版本控制(类似乐观锁),Innodb引擎会给每一行数据加一个版本号信息,当一个事务修改一个数据时会增加它的版本号+1,当颂芦一个事务开始的时候会缓存下此时的版本号,后面读取的时候只会读取这个版本号的数据,因此别的事务提交了修改数据的版本号大于它,因此不会被读到

面试官追问:事务的隔离级别如何设置:

答:在Mysql命令行下调用命令 set global.tx_isolation,但这样Mysql重启失效,修改my.cnf来永久设置

面试官追问:可重读读有什么问题

答:会出现幻读,幻读是指事务读取到一个值无法准确继续后续 *** 作。例如读取一个值,没有则插入,但是等插入的时候其他事务已经插入了,这就会导致插入失败,解决办法:sql语句显示加锁 :select xxxx for update,其他事务修改数据则会阻塞

程序员:创建/修改 数据库、数据表、存储过程、视图、索引、function、触发器等,编写和优化 各种SQL语句,存储过程

DBA:创建/修改 数据库、数据表、存储过程、视图、索引、function、触发器等,监控各种SQL和储存过程性能并给出修改建议,数据库全量/增量备份,文件组创建与维孝团首护或亩,数据库安全监控,服务器集群的维护和监控,只读和只写服务器之间的订阅和推送服务维护,数据库以及服务器集群故障恢复,数据库使用规范的发巧数布、维护、监控!

理论上是这样,软件工程师更应该关注于程序设计而非对于某一技术的掌握,编写和优化SQL应该交由基敬轮数据库专家负责,这是一种关注分离。\x0d\x0a但实际和理论相差甚远,尤其在中国:\x0d\x0a很少公司会聘请数据库专家进行开发的工作。\x0d\x0a而且相对的,数据库专家并不了解具体软件开发的技术,然而也没有人要求数据库专家要了解这些技术(是不是觉得对软件工程师很不公平),如果想让数据库专家能够工作搏信起来,软件工程师就必须从设计上把业务层与持久层的分离,目前很少工程师能够做到这一点,基本上都是把SQL内嵌到业务层里了。\x0d\x0a所稿指以如果公司没有提供这样理想的开发环境,还是有必要熟悉SQL的。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12352429.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存