#管理事务处理
事务处理:通过确保成批的 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理解为游戏中的存档点即可,读取(回滚)存档点时不会记录存档点之后的操作,相当于后续命令没有发生。
#使用游标
游标的用法:
一、声明一个游标: declare 游标名称 CURSOR for table;(这里的table可以是你查询出来的任意集合)
二、打开定义的游标:open 游标名称;
三、获得下一行数据:FETCH 游标名称 into testrangeid,versionid;
四、需要执行的语句(增删改查):这里视具体情况而定
五、释放游标:CLOSE 游标名称;
注:mysql存储过程每一句后面必须用;结尾,使用的临时字段需要在定义游标之前进行声明。
关于游标,这篇文章写的很好,这里我就不copy了,
MySQL游标概念与用法详解_Mysql_脚本之家www.jb51.net
SQL的笔记到这里告一段落,接下来就步入解决具体SQL题的文章了。
-END-