#管理事务处理

事务处理:通过确保成批的 SQL 操作要么完全执行,要么完全不执行,来维护数据库的完整性。

在使用事务处理时,有几个反复出现的关键词。

下面是关于事务处理需要知道的几个术语:

 事务(transaction)指一组 SQL语句;

 回退(rollback)指撤销指定 SQL语句的过程;

 提交(commit)指将未存储的 SQL语句结果写入数据库表;

 保留点(savepoint)指事务处理中设置的临时占位符(placeholder),

可以对它发布回退(与回退整个事务处理不同)。

事务处理用来管理 INSERT 、 UPDATE 和 DELETE 语句。不能回退 CREATE 或 DROP 操

Mysql的事务处理开始代码为



START TRANSACTION;
SELECT * FROM Orders;



下面举一个利用事务箱表中插入数据后再回滚的例子:



CREATE TABLE customer (a INT, b CHAR (20), INDEX (a)); -- 创建
START TRANSACTION; -- 开始事务
INSERT INTO customer VALUES (10, 'Heikki'); #插入
COMMIT; -- 提交事务,如果失败不会提交

DELETE FROM customer;  -- 删除表数据

ROLLBACK; -- 回滚



这里说明下delete和drop的关系

1.delete table 与delete from table 效果一样

2.delete table删除表的数据,表仍然存在,仍可以对表进行操作。同样,还有一个TRUNCATE TABLE TABLENAME语句,也是删除数据,表仍然存在。

3.drop table,是从数据库中删除表。删除后,表结构不在存在,无法再对该表进行任何操作。

下面举一个利用SAVEPOINT的例子:



START TRANSACTION; -- 开始事务
DELETE FROM customer where a=10; --删除a=10的那行
SAVEPOINT tmp1; -- 建立tmp1存档点
INSERT INTO customer VALUES (100, 'Hei'); #插入
ROLLBACK TO tmp1; -- 回滚到tmp1存档点
COMMIT -- 提交事务

SELECT * FROM customer; #查看发现表为空



将SAVEPOINT理解为游戏中的存档点即可,读取(回滚)存档点时不会记录存档点之后的操作,相当于后续命令没有发生。

#使用游标




对SQL Server decimal对应java sql server中declare_SQL


游标的用法:

一、声明一个游标: declare 游标名称 CURSOR for table;(这里的table可以是你查询出来的任意集合)

二、打开定义的游标:open 游标名称;

三、获得下一行数据:FETCH 游标名称 into testrangeid,versionid;

四、需要执行的语句(增删改查):这里视具体情况而定

五、释放游标:CLOSE 游标名称;

注:mysql存储过程每一句后面必须用;结尾,使用的临时字段需要在定义游标之前进行声明。

关于游标,这篇文章写的很好,这里我就不copy了,


MySQL游标概念与用法详解_Mysql_脚本之家www.jb51.net

对SQL Server decimal对应java sql server中declare_事务处理_02


SQL的笔记到这里告一段落,接下来就步入解决具体SQL题的文章了。

-END-