事务:由一堆dml(数据操作语言)语句组成,该组的语句要么全部成功,要么全部失败。
(例如:转账就是要用事务来处理,以保证数据的一致性)
事务和锁:当执行事务操作时,Mysql会在表上加锁,防止其他用户改表的数据,这对用户来讲是非常重要的。
-- 开始事务
START TRANSACTION
-- 设置保存点
SAVEPOINT one
-- 执行dml操作
INSERT into shiwu1 VALUES(100,"tom")
SELECT * FROM shiwu1
-- 设置保存点a
SAVEPOINT a
-- 执行dml
insert into shiwu1 values(200,"aliy")
-- 回退到a
rollback to a
-- 回退到one
rollback to one
-- 回退到事务开始的状态
-- 中途的所有保存点都会被删除
rollback
-- 提交,事务提交以后不能再回滚了
-- 提交以后会将保存点都给删除
-- 提交具体执行过程:确认事务的变化,结束事务,删除保存点,释放锁,数据生效,其他会话可以看见变化的数据
commit
提交事务的变化:
未提交时:
将事务提交:(隔离级别问题)
===================================
事务细节:
1、如果没有开启事务,那么默认dml就是自动提交的,无法回滚
2、如果开启了事务,但是没有设置保存点,那么点击回滚就会回滚到事务最开始的状态。(在创建事务的时候设置了一个默认的保存点)
3、事务还没提交的时候可以创建多个保存点
4、在事务还没提交的时候,可以选择回退到那个哪个点
5、mysql的事务需要用innodb的存储引擎,myisam不支持事务
6、开启事务的方式
1)start transaction
2) set autocommit=off