按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
项技术
Sybase Transact…SQL's 的ROLLBACK 语句与 MIT 语句非常相似
SYNTAX
rollback {transaction | tran | work} 'transaction_name | savepoint_name'
一个 ORACLE 的命令序列如下
INPUT
SQL》 SET TRANSACTION;
SQL》 INSERT INTO CUSTOMERS VALUES
(〃Bubba MacDowell〃; 〃2222 Blue Lake Way〃; 〃Austin〃; 〃TX〃; 39874; 8);
SQL》 ROLLBACK;
SQL》 SELECT * FROM CUSTOMERS;
Name Address City State Zip Customer_ID
Bill Turner 725 N。 Deal Parkway Washington DC 20085 1
John Keith 1220 Via De Luna Dr。 Jacksonville FL 33581 2
Mary Rosenberg 482 Wannamaker Avenue Williamsburg VA 23478 3
David Blanken 405 N。 Davis Highway Greenville SC 29652 4
Rebecca Little 7753 Woods Lane Houston TX 38764 5
Izetta Parsons 1285 Pineapple Highway Greenville AL 32854 6
John MacDowell 2000 Lake Lunge Road Chicago IL 42854 7
230
…………………………………………………………Page 231……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
而 A Sybase SQL 的命令序列则如下
INPUT
1》 begin transaction
2》 insert into CUSTOMERS values
(〃Bubba MacDowell〃; 〃2222 Blue Lake Way〃; 〃Austin〃; 〃TX〃; 39874; 8)
3》 rollback transaction
4》 go
1》 SELECT * FROM CUSTOMERS
2》 go
Name Address City State Zip Customer_ID
Bill Turner 725 N。 Deal Parkway Washington DC 20085 1
John Keith 1220 Via De Luna Dr。 Jacksonville FL 33581 2
Mary Rosenberg 482 Wannamaker Avenue Williamsburg VA 23478 3
David Blanken 405 N。 Davis Highway Greenville SC 29652 4
Rebecca Little 7753 Woods Lane Houston TX 38764 5
Izetta Parsons 1285 Pineapple Highway Greenville AL 32854 6
John MacDowell 2000 Lake Lunge Road Chicago IL 42854 7
你也看到了 由于使用了 ROLLBACK 命令撤消了 INSERT 命令 新的记录并没有被
加入到表中
如果你写了一个图形用户界面的应用程序 比如 MICRO WINDOWS 你可以做一个
数据库查询对话框以便让用户在其中输入数值 如果用户按下了 确定 按钮 那么数据
库将会保存所做的改动 如果用户按下了 取消 按钮 那么所有的更改就会被取消 显
然 这种情况给予了你使用事务处理的机会
注 下边的代码给出的 ORACLE SQL 中的使用方法 注意这里有 SQL》并且有行号
在随后给出的 Sybase SQL syntax 中则没有SQL》提示符
当对话框载入后 这些 SQL 语句将会运行
INPUT
SQL》 SET TRANSACTION;
SQL》 SELECT CUSTOMERS。NAME; BALANCES。CURR_BAL; BALANCES。ACCOUNT_ID
2 FROM CUSTOMERS; BALANCES
3 WHERE CUSTOMERS。NAME = 〃Rebecca Little〃
231
…………………………………………………………Page 232……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
4 AND CUSTOMERS。CUSTOMER_ID = BALANCES。ACCOUNT_ID;
该对话框允许用户更改当前的结算账号 所以你需要将该数据返回给数据库
当按下 OK 按钮以后 UPDATE 将会运行
INPUT
SQL》 UPDATE BALANCES SET CURR_BAL = 'new…value' WHERE ACCOUNT_ID = 6;
SQL》 MIT
如果用户按下了 CANCEL 那么将会运行 ROLLBACK 命令
INPUT
SQL》 ROLLBACK
当该对话框在 Sybase SQL 中被载入以后 将会运行下边的语句
INPUT
1》 begin transaction
2》 select CUSTOMERS。Name; BALANCES。Curr_Bal; BALANCES。Account_ID
3》 from CUSTOMERS; BALANCES
4》 where CUSTOMERS。Name = 〃Rebecca Little〃
5》 and CUSTOMERS。Customer_ID = BALANCES。Account_ID
6》 go
该对话框允许用户改变当前的结算账号 当你将该数据返回给数据库以后并按下 OK
按钮时 UPDATE 语句将会运行
INPUT
1》 update BALANCES set Curr_BAL = 'new…value' WHERE Account_ID = 6
2》 mit transaction
3》 go
如果用户选择了 CANCEL 按钮 那么将会执行 ROLLBACK 的语句
INPUT
1》 rollback transaction
2》 go
ROLLBACK 语句将会终止整个事务 当存在嵌套事务时 ROLLBACK 将会终止掉全
部事务 系统将会返回到事务开始的最初状态
如果当前没有活动的事务时 ROLLBACK 或 MIT 语句将不会对数据库产生任何
232
…………………………………………………………Page 233……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
作用 你可以认为这是一个无效的命令
在 MIT 语句运行以后 在事务中的所有动作都会得到确认 这时在使用
ROLLBACK 命令就太晚了
在事务中使用保存点
在事务中使用 ROLLBACK 可以取消整个的事务 但是你也可以在你的事务当中使用
语句进行 部分地确认 在 Sybase 和 Oracle 中都允许你在当前事务中设一个保存点 从
这一点开始 如果你使用了 ROLLBACK 命令 那么系统将会回到保存点时的状态 而在
保存点之前的语句将会得到确认 在 ORACLE 中创建一个保存点的语法格式如下
SYNTAX
SAVEPOINT savepoint_name;
在 SYBASE 中创建保存点的语法格式如下
SYNTAX
save transaction savepoint_name
下边是使用 ORACLE 语法的例子
INPUT
SQL》 SET TRANSACTION
SQL》 UPDATE BALANCES SET CURR_BAL = 25000 WHERE ACCOUNT_ID = 5
SQL》 SAVEPOINT save_it
SQL》 DELETE FROM BALANCES WHERE ACCOUNT_ID = 5
SQL》 ROLLBACK TO SAVEPOINT save_it
SQL》 MIT
SQL》 SELECT * FROM BALANCES
结算平衡表的内容如下
Average_Bal Curr_Bal Account_ID
1298。53 854。22 1
5427。22 6015。96 2
211。25 190。01 3
73。79 25。87 4
1285。90 25000。00 5
233
…………………………………………………………Page 234……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
1234。56 1543。67 6
345。25 348。03 7
1250。76 1431。26 8
下边是使用 Sybase 语法的例子
INPUT:
1》 begin transaction
2》 update BALANCES set Curr_Bal = 25000 where Account_ID = 5
3》 save transaction save_it
4》 delete from BALANCES where Account_ID = 5
5》 rollback transaction save_it
6》 mit transaction
7》 go
1》 select * from BALANCES
2》 go
Average_Bal Curr_Bal Account_ID
1298。53 854。22 1
5427。22 6015。96 2
211。25 190。01 3
73。79 25。87 4
1285。90 25000。00 5
1234。56 1543。67 6
345。25 348。03