欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Mysql 事务学习笔记

发布时间:2025/7/14 61 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Mysql 事务学习笔记 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1读写锁

1.1为什么为出现读写锁?

当一个人在update这个数据,另一个人在select查询这个数据的时候.会产生一种数据混乱,应运产生的锁.

锁的概念:

  • 读锁是共享的,并且不会阻塞. 写锁则是排他的
  • 同一个时间内只能有一个用户写入.

1.2 锁粒度.

  • 太多的锁又会影响效率,为了保证效率,会给不同级别的失误.安排不同的锁.最好只是精确的锁定. 因为锁本身不仅影响效率,也消耗资源.通常情况下,锁越少效率越高.

锁策略,就是在锁的开销和数据的安全性做出平衡.大部分商业数据库并没有提供特别多选择,只是在表上加上行级锁.

1.3 Mysql 的锁策略

  • 表锁,最基本也是开销最小策略.搜定这张表,在用户对表修改时候,需要先获得锁,并且阻塞其他用户的读写操作. 只有没有写锁的时候其他用户才能获得读锁,并且读锁之前不会阻塞
  • 行级锁可以最大成都的支持并发处理

2 事务

事务是一组原子性的sql查询,如果能执行查询全部语句,那么查询全部,如果又一条语句不成功,那么所有的都不执行.事务都要经过ACID 测试不然没有意义

2.1 ACID事务的四项检测

  • 原子性(atomicity)
    • 一个事务被视为一个不可分割的最小工作单元.就像原子不可分割一样.
  • 一致性(consistency)
    • 数据库总是从一个一致性的状态转换为另一个一致性的状态.要么全部成功,要么全部失败,结果应该是一致的,不应该有的成功,有的失败.
  • 隔离性(Isolation)
    • 一个事务在做修改成功之前,对其他的事务是不课件的. 当你对一个账户进行取款操作,那么另一个程序是无法看见你的操作结果.直到你成功之前
      • 隔离级别Isolation Level
        • Read uncommited
          • 在READ UNCOMMITED级别. 事务中的修改,即使没有提交,对其他事务可见.
        • READ COMMITED
          • 大多数数据库的默认级别都是Read committed.Mysql不是. 一个事务开始的时候,只能看见自己已经提交的修改.
            在不提交前,对其他事务完全不可见.
        • REPEATABLE READ
          • REPEATABLE READ 解决了脏读的问题,该级别保证同一个事务多次读取结果是一致的. 但同事导致幻读的问题.当读取某个范围的数据的时候,里一个事务又在该范围内插入新的数据
            当之前事务在读取的时候会产生幻行.
        • SERIALIZABLE
          • 最高Isolation Level级别,通过强制事务串的执行.避免了之前说的幻读,SERIALIZABLE 会在每一行数据加锁.所以可能导致大量超时和锁争抢的问题.
            非常少用.只有当需要保持数据一致性而接受没有并发的情况下才考虑.
  • 持久性(durability)
    • 一旦事务提交,修改就会永久保存在数据库中.及时系统崩溃也不会丢失.这个策略主要保证数据不会丢失.而且上持久性也分不同的级别.有的持久程度高,又的持久程度低.

1-1 各种隔离级别的区别和特点

Isolation Level(隔离)脏读可能性不可重读可能性幻读可能性加锁读
Read uncommittedYESYESYESNO
READ COMMITTEDNOYESYESNO
PEPETABLE READNONOYESNO
SERIALIZABLENONONOYES

转载于:https://www.cnblogs.com/maxaimee/p/6534272.html

总结

以上是生活随笔为你收集整理的Mysql 事务学习笔记的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。