0
点赞
收藏
分享

微信扫一扫

mysql:什么是事务及其特性ACID,事务的并发问题,事务的隔离级别


mysql:什么是事务及其特性ACID,事务的并发问题,事务的隔离级别

什么是事务?

一组逻辑操作单元,使数据从一种状态变换到另一种状态
其实一个sql也可以理解为一个事务。
多个sql也可以组成一个sql。

acid:事务的特性

  • 原子性(atomicity)
    原子理解为最小的工作单元,所以一个事务要么全部执行成功,要不全部失败。
  • 一致性(consistency)
    一致性是指事务执行前后,数据从一个 合法性状态 变换到另外一个 合法性状态
  • 隔离型(isolation)
    隔离性,指各个事务之间的操作互补影响,通过锁机制实现。
  • 持久性(durability)
    持久性,就是事务对数据的修改是可以持久化的,长期保存。

数据并发问题

  • 脏写
    对于两个事务 Session A、Session B,如果事务Session A 修改了 另一个 未提交 事务Session B 修改过 的数据,那就意味着发生了 脏写
  • 脏读
    对于两个事务 Session A、Session B,Session A 读取 了已经被 Session B 更新 但还 没有被提交 的字段。之后若 Session B 回滚 ,Session A 读取 的内容就是 临时且无效 的。
  • 不可重复读
  • 幻读
    对于两个事务Session A、Session B, Session A 从一个表中 读取 了一个字段, 然后 Session B 在该表中 插入 了一些新的行。 之后, 如果 Session A 再次读取 同一个表, 就会多出几行。那就意味着发生了幻读。

sql中的四种隔离级别

  • READ UNCOMMITTED :读未提交
    读未提交,在该隔离级别,所有事务都可以看到其他未提交事务的执行结
    果。不能避免脏读、不可重复读、幻读。
  • READ COMMITTED :读已提交
    一个事务只能看见已经提交事务所做
    的改变。这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。可以避免脏读,但不可
    重复读、幻读问题仍然存在。
  • REPEATABLE READ :可重复读
    可重复读,事务A在读到一条数据之后,此时事务B对该数据进行了修改并提
    交,那么事务A再读该数据,读到的还是原来的内容。可以避免脏读、不可重复读,但幻读问题仍
    然存在。这是MySQL的默认隔离级别。
  • SERIALIZABLE :可串行化
    确保事务可以从一个表中读取相同的行
    可串行化,确保事务可以从一个表中读取相同的行。在这个事务持续期间,禁止其他事务对该表执行插入、更新和删除操作。所有的并发问题都可以避免,但性能十分低下。能避
    免脏读、不可重复读和幻读。
  • mysql:什么是事务及其特性ACID,事务的并发问题,事务的隔离级别_数据库


举报

相关推荐

0 条评论