目录
事务的执行要么成功,要么就返回到事务开始前的状态,这就保证了同一事务操作的同步性和数据的完整性。mysql默认情况下,一条sql语句就是一个事务。
举例:转账分为两个部分来完成。转入和转出,只有这两个部分都能完成才认为转账成功。
A账户给B账户转账100元
A账户减少100元
B账户增加100元
Atomicity:原子性—— 一个不可分割的最小单元
Consistency:一致性—— 无论是否成功,数据库的状态都是一致性的 ------------mysql是通过日志的变化来记录数据的
lsolation:隔离性—— 事务与事务之间没有影响
Durability:持久性 ——事务一旦提交,则数据库就保持完整
账户表 account(id,name,money)

代码
- #开启事务
- START TRANSACTION;
- #模拟转出
- UPDATE account SET money=money -100 WHERE id=1;
- #模拟转入
- UPDATE account SET money=money +100 WHERE id=2;
- #查询一下
- SELECT * FROM account;
- COMMIT;
-
- 一个会话层面,事务是建立在一个会话层的

关键字:SAVEPOINT 保存点,也称回滚点
代码
- #开启事务
- START TRANSACTION;
- UPDATE account SET money=money -10 WHERE id=1;
- #设置保存点
- SAVEPOINT S1;
- UPDATE account SET money=money -20 WHERE id=2;
- #回滚保存
- ROLLBACK TO SAVEPOINT S1;
- #查询一下
- SELECT * FROM account;
- #提交
- COMMIT;
所以的隔离级别默认为:REPEATABLE READ (可重复读)
隔离级别
1READ UNCOMMITTED; 脏读
2READ COMMITTED; 读取提交 不能重复读
3REPEATABLE READ;读取提交 可重复读
4SERIALIZABLEl; 可串行化 加锁
设置事务的隔离级别
SET [SESSION| GLOBAL] transaction_isolation LEVEL 级别