【你问我答】数据库的隔离级别有哪些?​

问题描述:

数据库的隔离级别有哪些?

回答有奖:

选取一位认真回答问题的牛友,赠送200牛币!
▶回答尽量有自己的思考,不要单纯的只是复制粘贴定理定义,或者他人blog哦~

你问我答问题汇总:点击进入
关注你问我答栏目:点击关注

你问我答 - 答问题,成大佬,拿牛币!
你问我答是牛客新栏目,每周1期几个面试中真实遇到的问题,
牛友在问题贴下留下自己的知识,经验与见解,
帮助更多牛友了解更多技术相关知识!
#悬赏##Java##C/C++##面试题目#
全部评论
我只知道Mysql的隔离级别。。 读未提交:读不加锁,写加行锁,可能会脏读。事务中的修改,即使没有提交,对其他事务也都是可见的。事务可以读取为提交的数据,这也被称为脏读。 举例:用户A修改了数据(未提交commit事务),而用户B能读到A修改后的数据。 读提交(不可重复读):读写加行锁,读完释放,写加独占锁(排他锁),因此写时不能进行读操作,避免脏读。一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的。这个级别有时候也叫不可重复读,因为两次执行同样的查询,可能会得到不一样的结果。 举例:用户A修改了数据(未提交commit事务),而用户B不能读到A修改并且未提交的数据。当用户A提交事务后,用户B才能读到A修改后的数据。 可重复读:(Mysql默认隔离级别)读时加共享锁,事务结束时释放,即其他事务必须等该事务结束才能更新操作,这样防止了不可重复读 可串行化:会在读取的每一行数据上都加锁,可能导致大量的超时和锁争用的问题。
1 回复
分享
发布于 2020-06-10 21:46
      1.READ UNCIMMITTED(未提交读)   事务中的修改,即使没有提交,其他事务也可以看得到其中修改的数据的后果,也就是脏读,这种隔离级别会引起很多问题,如无必要,不要随便使用。   2.READ COMMITTED(提交读)   大多数数据库系统的默认隔离级别是READ COMMITTED,这种隔离级别就是一个事务的开始,只能看到已经完成的事务的结果,正在执行的,是无法被其他事务看到的。这种级别会出现读取旧数据的现象。看到的是旧数据,也就是无效的数据。   3.REPEATABLE READ(可重复读)    REPEATABLE READ解决了脏读的问题,该级别保证了每行的记录的结果是一致的,也就是上面说的读了旧数据的问题,但是却无法解决另一个问题,幻行,顾名思义就是突然蹦出来的行数据。指的就是某个事务在读取某个范围的数据,但是另一个事务又向这个范围的数据去插入数据,导致多次读取的时候,数据的行数不一致。虽然读取同一条数据可以保证一致性,但是却不能保证没有插入新的数据。   4.SERIALIZABLE(可串行化)   SERIALIZABLE是最高的隔离级别,它通过强制事务串行执行(注意是串行),避免了前面的幻读情况,由于大量加上锁,导致大量的请求超时,因此性能会比较底下,再特别需要数据一致性且并发量不需要那么大的时候才可能考虑这个隔离级别。
点赞 回复
分享
发布于 2020-06-11 10:06
联想
校招火热招聘中
官网直投

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务