请选择 进入手机版 | 继续访问电脑版

数据库四大特性及数据库隔离级别

[复制链接]
滚雪球少年 发表于 2020-12-31 18:56:53 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
数据库的四大特性ACID:


  • 原子性(Atomicity)
    原子性是指事务包罗的所有使用要么全部成功,要么全部失败回滚。
  • 一致性(Consistency)
    一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
  • 隔离性(Isolation)
    隔离性是指当用户并发访问数据库时,多个并发事务之间,应当相互隔离。(最差的是,串行执行即一个事务执行完成之后,另一个事务在执行)
  • 恒久性(Durability)
    恒久性是指事务的使用,一旦提交,对于数据库中数据的改变是永久性的
由不同隔离性引发的数据不一致性:

  • 脏读
    脏读是指一个事务读取了未提交事务执行过程中(包换了多次的dml,但是未提交事务,随时可能回滚)的数据。
eg:当一个事务的使用正在多次修改数据,而在事务还未提交的时候,另外一个并发事务来读取了数据,就会导致读取到的数据并非是最终恒久化之后的数据,这个数据就是脏读的数据。
2.不可重复读
不可重复读是一个事务执行过程中,另一事务提交并修改了当前事务正在读取的数据,导致当前事务读取到了不同的数据。(乐观锁实现原理,靠不可重复读触发数据不一致,来数据回滚)
3.幻读:
幻读和不可重复读都是读取了已经提交的事务(这点同脏读不同),不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。
MySQL定义了四种隔离级别:(依次是:读未提交,读已提交,可重复读,串行读取)

注:repeatable read是mysql默认事务隔离级别
read commited是大多数数据库的默认隔离级别
serializable级别是最高级别的隔离级。它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简而言之,SERIALIZABLE是在每个读的数据行上加锁。在这个级别,可能导致大量的超时和锁竞争现象,实际应用中很少使用到这个级别,但如果用户的应用为了数据的稳定性,需要强制淘汰并发的话,也可以选择这种隔离级
锁机制
1、共享锁:(读锁,各人都能读)
读表时加锁,加锁后其他用户只能获取该表或行的共享锁,不能获取排它锁,也就是说只能读不能写
2、排它锁:(写锁,只限单个人能写)
写表时加锁,加锁后其他用户不能获取该表或行的排他锁,共享锁
3、表锁:给整张表加锁
4、行锁:给行数据加锁
总结:可以分为表级共享锁、行级共享锁、表级排它锁、行级排它锁。

来源:https://blog.csdn.net/qq_41536934/article/details/111937883
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )