事务是为了解决一组数据库操作过程中出现意外而导致数据不能同步的更新和操作以致业务出现不能允许的情况
比如:人员管理系统,我们在删除一个人的时候,通常需要同时删除他的附带信息,如信箱,文章等等。如果删除过程中出现了错误,导致只删除了一部分,这样就不能满足我们的需求。这样的一组操作就构成了事务。
事务有几个要求:
1 原子性:要不就全部成功,要不就全部失败
2一致性 :事务操作后要使得数据库从一个操作转变成另外的一个操作,比如商品出库,一定要让商品进入到客户的购物篮才行(数据的一致性)
3隔离性: 如果多个事务同时并发执行,要让他们跟各自独立执行一样
4 持久性(Durability):一个成功执行得事务对数据库得作用是持久得,即使数据库应故障出错,也应该能够恢复!
Mysql从4.0开始就支持了事务操作,5.0引入了存储过程
MySQL的事务操作2中方法:
start transaction 开始一个事务
rollback 回滚事务
commit 提交事务
事务的隔离级别:
repeatable read 可重复读 解决了不可重复读的问题(Mysql默认的隔离级别)
意思是:在一个事物操作中,可以重复的获取这个事务当前的数据,不管其他事务是否更改了数据库的信息,当rollback之后,数据才会更改。
串行化:
一个事务在操作数据库的时候,另外一个事务只能等待,除非当前事务rollback或者提交了,其他事务才能操作,否则就处于等待或者超时后退出。
read uncommited 读到了另外一个事务没有提交的数据,存在的问题:脏读。
read commited 只能读到另外一个事务已经提交的数据,解决了脏读问题。