友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
SQL 21日自学通(V3.0)(PDF格式)-第44部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
SQL Server's Transact…SQL 语言用下边的方法来实现了开始事务处理的命令
SYNTAX
begin {transaction | tran} 'transaction_name'
它的实现方法与 ORACLE 的有一些不同 SYBASE 不允许你指定 READ ONLY 选
项 但是 SYBASE 允许你给出事务处理的名字 从最早的事务到最近发生的事务处理都
可以一次退回
INPUT
1》 begin transaction new_account
2》 insert CUSTOMERS values (〃Izetta Parsons〃; 〃1285 Pineapple Highway〃; 〃Greenville〃; 〃AL〃
32854; 6)
3》 if exists(select * from CUSTOMERS where Name = 〃Izetta Parsons〃)
4》 begin
5》 begin transaction
6》 insert BALANCES values(1250。76; 1431。26; 8)
7》 end
8》 else
226
…………………………………………………………Page 227……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
9》 rollback transaction
10》 if exists(select * from BALANCES where Account_ID = 8)
11》 begin
12》 begin transaction
13》 insert ACCOUNTS values(8; 6)
14》 end
15》 else
16》 rollback transaction
17》 if exists (select * from ACCOUNTS where Account_ID = 8 and Customer_ID = 6)
18》 mit transaction
19》 else
20》 rollback transaction
21》 go
现在 请不要担心 ROLLBACK TRANSACTION 和 MIT TRANSACTION 语句
重要的问题是这是一个内嵌的事务处理 或者说是事务处理之中还有事务处理
注意 最开始的事务处理在第 1 行 之后是插入语句 你检查了插入确实已经执行了
以后 第二个事务处理在第 5 行开始 这种在事务之中的事务在术语上称为内嵌事务
有一些数据库支持 AUTOMIT 选项 它可以在 SET 命令中使用 如下例
SET AUTOMIT 'ON | OFF'
默认情况上 SET AUTOMIT ON 命令在启动时是自动运行的 它告诉 SQL 自动确
认你所运行的所有的语句 如果你不想让这个命令自动运行 那么请将它的参数设为 NO
SET AUTOMIT OFF
注 请检查你的数据库文档确认在你的数据库系统中一项事务处理是如何开始的
结束事务处理
在 ORACLE 语法中结束事务处理语句的语法如下
SYNTAX
MIT 'WORK'
' MENT 'text'
227
…………………………………………………………Page 228……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
| FORCE 'text' '; integer' ' ;
它的命令语法与 Sybase 的语法是相同的
语法
MIT (TRANSACTION | TRAN | WORK) (TRANSACTION_NAME)
MIT 命令将保存在一项事务中所进行的所有的改变 在开始一项事务处理之前要
先运行 MIT 命令以确保在之前没有事务未被确认
在下边的例子中 如果 MIT 没有收到任何系统错误的情况下它将会执行确认
INPUT
SQL》 MIT;
SQL》 SET TRANSACTION READ ONLY;
SQL》 SELECT * FROM CUSTOMERS
WHERE NAME = 'Bill Turner';
………Do Other Operations……
SQL》 MIT;
在 ORACLE 中 MIT 语句的使用方法如下
INPUT
SQL》 SET TRANSACTION;
SQL》 INSERT INTO CUSTOMERS VALUES
(〃John MacDowell〃; 〃2000 Lake Lunge Road〃; 〃Chicago〃; 〃IL〃; 42854; 7);
SQL》 MIT;
SQL》 SELECT * FROM CUSTOMERS;
CUSTOMER 表的内容如下
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
而 Sybase SQL 使用 MIT 的语法方式如下
228
…………………………………………………………Page 229……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
INPUT
1》begin transaction
2》insert into CUSTOMERS values
(〃John MacDowell〃; 〃2000 Lake Lunge Road〃; 〃Chicago〃; 〃IL〃; 42854; 7)
3》mit 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
上边的语句完成了与 ORACLE7 相同的功能 但是 在使用 MIT 确认事务处理
之前 你应该确保在该事务中的工作是正确无误的
注 MIT WORD 命令与 MIT 命令的作用是相同的 或 Sybase 中的 MIT
TRANSACTION 它与 ANSI SQL 的语法一样的简单
切记 MIT 语句一定要与之前的 SET TRANSCATION 或 BEGIN TRANSCATION
语句一致 注意 在下边的语句中你将会收到错误信息
Oracle SQL
INPUT
SQL》 INSERT INTO BALANCES values (18765。42; 19073。06; 8);
SQL》 MIT WORK;
Sybase SQL
INPUT
1》 insert into BALANCES values (18765。42; 19073。06; 8)
2》 mit work
229
…………………………………………………………Page 230……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
取消事务处理
在一个事务处理的过程中 常常会运行一些错误检查以确认在过程中是否语句是运行
成功 你可以使用 ROLLBACK 语句来撤消事务中所做的每一项工作 即便工作是成功的
你也可以撤消 但是 这必须是在 MIT 之前 ROLLBACK 语句必须在一个事务之中
运行 它可以一直撤消到事务的开始 也就是说 数据库会一直返回到事务处理刚开始的
状态 在 ORACLE 7 中它的语法形式如下
SYNTAX
ROLLBACK 'WORK'
' TO 'SAVEPOINT' savepoint
| FORCE 'text' '
如你所见 该命令可以设置事务的 SAVEPOINT 我们将在今天的晚些时候来讨论这
项技术
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
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!