Mysql笔记(五)事务

事务介绍

MySQL中的事务是由存储引擎实现的,而且支持事务的存储引擎不多,我们主要讲解InnoDB存储引擎中的事务。
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行
事务用来管理DDLDMLDCL 操作,比如 insert,update,delete 语句,默认是自动提交的。

事务四大特性(ACID)
  • 原子性(Atomicity)
    一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
  • 一致性(Consistency)
    一致性是指数据处于一种语义上的有意义且正确的状态。一致性是对数据可见性的约束,保证在一个事务中的多次操作的数据中间状态对其他事务不可见的。因为这些中间状态,是一个过渡状态,与事务的开始状态和事务的结束状态是不一致的。
  • 隔离性(Isolation)
    数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行导致数据的不一致
  • 持久性(Durability)
    事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
事务遇到的问题
  1. 脏读
    脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。
  2. 不可重复读
    是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。
  3. 幻读
    第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样,幻读是数据行记录变多了或者少了。

简单点总结:
脏读是指读取了未提交的记录。
不可重复读指因为被其它事务修改了记录导致本次事务两次读取记录不一致
幻读是指因为其它事务对表做了增删导致某事务两次读取的表记录数不一致

事务的隔离级别
  • 读未提交(Read Uncommitted)
    所有事务都可以看到没有提交事务的数据。
  • 读已提交(Read Committed)
    事务成功提交后才可以被查询到,防止了脏读问题。
  • 可重复读(Repeatable Read)
    同一个事务内多次查询同一数据不受其他事务的影响,始终返回本事务开始查询的数据,防止了脏读、不可重复读。本隔离级别是InnoDB的默认隔离级,并且在InnoDB下本隔离级别使用Next-Key锁还有防止幻读的产生。
  • 串行化(Serializable)
    强制串化排序执行SQL,在每个读数据行上添加共享锁。会导致大量超时现象和锁竞争。这是花费最高代价但是最可靠的事务隔离级别。防止脏读,不可重复,幻读
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值