MySQL事务
简单来说事务就是要么全都成功,要么全部失败的一组语句
事务的四种隔离级别:读未提交(read committed)、读已提交(read uncommitted)、可重复读(repeatable read)、可串行化(serializable)
1.读未提交:两个事务同时操作一个表,其中一个事务修改了表中的数据并提交,另外一个事务数据在提交的前后都可以查看数据的更改,这个问题被称为脏读,解决脏读的方法就是将隔离级别变成读已提交
2.读已提交:同样是两个事务操作一个表,其中一个事务修改了数据并提交数据,但是另外一个事务只有在提交之后,才能看这个数据是否被修改,解决了脏读的问题,但是又出现了一个事务范围内,两个相同的查询却返回了不同的结果,就是不可重复读问题
3.可重复读:在开始查询的时候,不在允许事务修改,只有当我的查询结束,提交之后,才可以看到别的事务修改的结果,但是这个时候我已经把自己的事情完成了,但是这个如果针对的是update和delete,不针对insert,就产生了幻读问题
4.可序列化:可以解决脏读、不可重复读、幻读问题,但是效率低下,一般不使用
MySQL事务的特性:原子性、一致性、隔离性、持久性
1.原子性:事务是应用中最小的执行单位,不可再分
2.一致性:事务的状态只能由一个一致性到达另外一个一致性,那怕中间系统中断,也会一致
3.隔离性:各个事务的执行互不干扰
4.持久性:事务一旦提交,就会永久保存在数据库中