part7. 事务处理维护DB完整性|游标的使用

2019-01-05  本文已影响0人  katelin

第20课 管理事务处理

why?
确保成批的SQL操作要么完全执行,要么完全不执行,来维护数据库的完整性。
what?

事务:指一组SQL语句
回退:指撤销指定的SQL语句的过程
提交:指将未存储的SQL语句结果写入数据库表
保留点:指事务处理中设置的临时占位符,可以对它发布回退
事务处理可以用来管理INSERT、UPDATE、DELETE语句,不能回退SELECT、CREATE、或DROP

how?

SQL Server:

BEGIN TRANSACTION
...
COMMIT TRANSACTION

MySQL:

START TRANSACTION
...

Oracle:

SET TRANSACTION
  1. ROLLBACK
DELETE FROM Orders;
ROLLBACK;
  1. COMMIT
    隐式提交:一般的SQL语句都是针对数据库表直接执行和编写的,这就是所谓的隐式提交,即提交操作是自动进行的。
    在事务处理块中,显示提交COMMIT。
  2. 使用保留点
    MySQL/Oracle:
#创建占位符
SAVEPOINT delete1;
...
# 回退
ROLLBACK TO delete1;

SQL Server:

# 创建保留点
SAVE TRANSACTION delete1;
...
# 回退
ROLLBACK TRANSACTION delete1;
BEGIN TRANSACTION
...
SAVE TRANSACTION StartOrder;
...
# 如果@@ERROR返回一个非0值,表示有错误发生,事务回退到保留点
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
...
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
COMMIT TRANSACTION

第21课 使用游标

what?why?
游标(cursor)是一个存储在DBMS服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。

how?
创建:

DECLARE CustCursor CURSOR
FOR
SELECT * FROM Customers
WHERE cust_email IS NULL;

使用:

OPEN CURSOR CustCursor

用FETCH语句访问游标数据,FETCH指出要检索哪些行,从何处检索它们以及将他们放于何处(如变量名)

DECLARE @cust_id CHAR(10),
        @cust_name CHAR(50)
OPEN CustCursor
FETCH NEXT FROM CustCursor
    INTO @cust_id, @cust_name
WHILE @@FETCH_STATUS=0
BEGIN
FETCH NEXT FROM CustCursor
      INTO @cust_id, @cust_name
...
END
CLOSE CustCursor

关闭:

CLOSE CustCursor
DEALLOCATE CURSOR CustCursor
上一篇 下一篇

猜你喜欢

热点阅读