1.什么是事务
- 事务是一个原子操作。是一个最小执行单元。可以甶一个或多个
SQL
语句组成 - 在同一个事务当中,所有的
SQL
语句都成功执行时,整个事务成功,有一个SQL
语句执行失败,整个事务都执行失败。
2.事务特性
- 原子性(Atomicity):事务是一个原子性质的操作单元,事务里面的对数据库的操作要么都执行,要么都不执行。
- 一致性(Consistency):在事务开始之前和完成之后,数据都必须保持一致状态,必须保证数据库的完整性。也就是说,数据必须符合数据库的规则。
- 隔离性(Isolation):一个事务的执行不能被其他事务干扰。即一个事务的内部操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持久性(Durability):持久性也成为永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久的。
3.MySQL事务操作
事务分为隐式事务和显式事务。
查看是否开启自动提交
show variables like 'autocommit';
手动控制事务
方式一:
示例一:提交事务操作
set autocommit=0;
insert into t_test values(1);
commit;
示例二:回滚事务操作
set autocommit=0;
insert into t_test values(2);
rollback;
方式二:
把autocommit
还原回去:
set autocommit=1;
示例一:提交事务操作
start transaction;
insert into t_test values (2);
insert into t_test values (3);
commit;
最终结果:成功插入2条数据记录。
示例二:回滚事务操作
start transaction;
delete from t_test;
rollback;
最终结果:由于执行了rollback操作,导致删除操作回滚。
3.3.savepoint关键字
可以实现回滚事务中部分数据,相当于一个书签,放在哪回滚到哪
savepoint
效果演示:
start transaction;
insert into t_test values (1);
savepoint point1;
insert into t_test values (2);
rollback to point1;
commit;
最终结果:保存点
point1
到rollback to point1
之间的操作将被回滚。
3.4.只读事务
表示在事务中执行的是一些只读操作,如查询,但是不会做insert、update、delete操作。
start transaction read only;
select * from t_test;
delete from t_test;
commit;
最终结果ÿ