4.事务
4.1什么是事务
什么是事务,我们可以举一个简单的例子,银行转账问题
银行转账分为两步:
- a转账给b
- b收到a的转账
这两步其实是两个sql语句:
- 用sql语句将数据库中账户表中a的钱减去一些
- 用sql语句将数据库中账户表中b的钱加上一些
我们可以知道,只有当上面两步都完成才能完成转账这个操作,如果其中一个失败,都会导致一些问题,例如两个账户的总和多了一些钱或者少了一些钱,所以这两步要么都成功,要么都失败。我们把类似银行转账这样的操作称为事物。
事物的原则 ACID
原子性(Atomicity):事物这个操作是原子操作,要么都成功,要么都失败
一致性(Consistency):事物操作前和操作后,事物的状态一致。例如转账时前的总和不变
隔离性(Isolation):不同事物间不会相互影响
持久性(Durability):事务结束后的数据不随着外界的原因导致数据丢失。事务没有提交,恢复到元状;事务提交,持久化到数据库,不可逆了。
隔离导致的一些问题:
脏读:指一个事物读了另一个事务未提交的数据
不可重复读:在有一个事务内读取表中的某行数据,多次读取数据结果不同。
虚读:是指在一个事务内读取到了别的事物插入的数据,导致前后读取不一致
执行事务
--mysql默认开启事务自动提交的
set autoconmmit=0 --关闭
set autoconmmit=1 --开启
--事务执行步骤
--1.关闭自动提交
set autoconmmit=0 --关闭
--手动开启事务
--2.开启事务
start transaction
insert语句1
insert语句2
insert语句3
--3.提交
commit
--4.回滚
rollback
--5.事务结束
set autocommit=1