目录
概念:多条语句组成一个执行单位
事务的基本操作
MySQL中的事务必须满足A,C,I,D这四个基本特性
事务操作举例——(转账)
事务保存点——SAVEPOINT
事务隔离级别——多线程(并发同时访问)
总结
概念:多条语句组成一个执行单位
事务的执行要么成功,要么就返回到事务开始前的状态,这就保证了同一事务操作的同步性和数据的完整性。mysql默认情况下,一条sql语句就是一个事务。
举例:转账分为两个部分来完成。转入和转出,只有这两个部分都能完成才认为转账成功。
A账户给B账户转账100元
-
A账户减少100元
-
B账户增加100元
事务的基本操作
- 开启事务:START TRANSACTION ——(start transaction)
- 事务提交:COMMIT
- 回滚事务:ROLLBCAK
- 操作流程: 开启事务——>执行语句——>提交事务
MySQL中的事务必须满足A,C,I,D这四个基本特性
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
关键字: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;
事务隔离级别——多线程(并发同时访问)
- 查看全局隔离 ——@@global.transaction_isolation
- 当前会话隔离 ——@@session.transaction_isolation
- 下一事务隔离 ——@@transaction_isolation
所以的隔离级别默认为:REPEATABLE READ (可重复读)
隔离级别
-
1READ UNCOMMITTED; 脏读
-
2READ COMMITTED; 读取提交 不能重复读
-
3REPEATABLE READ;读取提交 可重复读
-
4SERIALIZABLEl; 可串行化 加锁
设置事务的隔离级别
SET [SESSION| GLOBAL] transaction_isolation LEVEL 级别
总结
- 事务更有助于任务的执行不被打搅
- 事务保证的任务执行的完整性、准确性
- lock的应用,虽然很好,保证了事务不被打搅,但是浪费时间