事务是由一组SQL语句组成的逻辑处理单元.
mysql的事务的基本格式就是:
start transaction;
~sql语句;
commit;
事务的四个ACID属性:
- 原子性(Atomicity):事务是一个原子操作单元;其对数据的修改要么全部执行,要么全不执行(着重点在对sql语句的执行上)
- 一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态。这意味所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性(着重点时数据是否一致修改完成)
- 隔离性(Isolation):数据库系统提供一定的隔离机制,事务处理过程中的中间状态对外部不可见,反之亦然。
- 持久性(Durable):事务完成后,对数据库的修改是永久的,即使出现故障也能保持。
但实际应用中,数据库一般都会并发执行多个事务,多个事务并发那么也就会带来一些问题。
- 脏写或者更新丢失:当两个事务选择同一行进行更新时,最后更新就会覆盖其他事务所做的更新
- 脏读:事务A读到了事务B已经修改但是还没有提交的数据。
同时开启两个窗口,模拟事务A事务B
- 不可重复读(Non-Repeatable Reads):一个事务在读取某些数据成功后,没有提交事务,在下一个时间再去读取之前已经读过的数据,发现数据已经变了或者已经删除了
- 幻读:事务A读取到了事务B提交的新增数据,不符合隔离性,和上面两种操作步骤差不多,可以自己操作一下。
事务隔离级别
针对这些事务并发问题,数据库也相应地采取措施进行处理-------事务隔离级别
查看当前数据库的事务隔离级别:show variables like 'tx_isolation';
设置当前的数据库的事务隔离级别:set session transaction isolation level read uncommitted;
mysql默认是可重复读级别.
接下篇文章事务详解2-----事务与行锁的关系