事务处理
事务处理:通过确保成批的SQL操作要么完全执行,要么完全不执行,
来维护数据库的完整性。
事务处理是一种机制,用来管理必须成批执行的SQL操作,保证数据库不包含不完整的操作结果。
COMMIT(提交/相当于确定)
ROLLBACK(回滚/相当于撤销)
事务:transaction 指一组SQL语句;
回退:rollback 指撤销指定SQL语句的过程;
提交:commit 指将未存储的SQL语句结果写入数据库表;
保留点:savepoint 指事务处理中设置的临时占位符(placeholder),可以对它发布回退(与回退整个事务处理不同)。
事务处理用来管理INSERT、UPDATE、DELETE语句。
SELECT语句不需要,CREATE和DROP操作不能回退。
事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。
一个简单的事务处理:
begin transaction --开始事务
delete from check_1 --删除表check_1中的记录
commit transaction; --提交事务
使用保留点
SAVE/savepoint
要支持回退部分事务,必须在事务处理快中的合适位置放置占位符。回退时,回退到某个占位符。在SQL中,占位符也叫保留点。
创建带有保留点的事务:
使用ROLLBACK
ROLLBACK命令用来回退/撤销SQL语句。
begin transaction --开始事务
insert into check_1 --删除表check_1中的记录
(id,name,age,gender)
values(1,'张三',33,'男')
save transaction insert_1; --创建保留点
insert into check_1
(id,name,age,gender)
values(2,'李四',31,'男')
commit transaction; --提交事务
rollback transaction insert_1; --将事务回滚到 insert_1的状态
指定条件的回滚:
begin transaction --开始事务
insert into check_1 --插入表join_2中的记录
(id,name,age,gender)
values(1,'张三',33,'男')
save transaction insert_1; --创建一个名为insert_1的保留点
insert into check_1
(id,name,age,gender)
values(2,'李四',31,'男')
save transaction insert_2; --创建一个名为insert_2的保留点
insert into check_1
(id,name,age,gender)
values(2,'李四',31,'男')
if @@error <> 0 rollback transaction insert_1
/*
设定回滚到insert_1保留点的条件,当出现错误时执行回滚
条件为布尔值
*/
commit transaction; --提交事务
/*
最后结果,因为第三次插入数据有ID重复值产生错误,
符合设定的回滚条件,执行回滚。数据表中只插入第一次数据。
*/
保留点越多,你就能进行越加灵活的回退。