友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
SQL 21日自学通(V3.0)(PDF格式)-第33部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 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 7
1250。76 1431。26 8
在上边的例子中创建了一个叫 SAVE_IT 的保存点 UPDATE 语句更新了结算平衡表中
的 CURR_BAL 列 你在其后设置了一个保存点 在保存之后 你又运行了 DELETE 命令
系统退回到了保存点处 之后你对事务用 MIT 命令进行了确认 结果所有在保存点
之前的命令得到了确认
如果你在其后又使用了 ROLLBACK 命令 那么将会取消当前的事务而不会有任何的
改变
在 ORACLE 中的例子如下
INPUT
SQL》 SET TRANSACTION
234
…………………………………………………………Page 235……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
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》 ROLLBACK
SQL》 SELECT * FROM BALANCES
BALANCE 表的内容如下
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 1473。75 5
1234。56 1543。67 6
345。25 348。03 7
1250。76 1431。26 8
Sybase SQL 语法的例子如下
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》rollback 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
235
…………………………………………………………Page 236……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
1285。90 1473。75 5
1234。56 1543。67 6
345。25 348。03 7
1250。76 1431。26 8
总结
事务可以被定义为一个有组织的工作单元 事务通常会执行一系列的以前学过的操作
如果由于一些原因使得操作没有如所期望地执行 那么可以在事务中取消这些操作 反之
如果操作全部正确执行了 那么事务中的工作可以确认
可以使用 ROLLBACK 命令来取消事务 确认事务的命令为 MIT SQL 用非常相
似的语法来支持这两类过程
SYNTAX
BEGIN TRANSACTION
statement 1
statement 2
statement 3
ROLLBACK TRANSACTION
或
SYNTAX
BEGIN TRANSACTION
statement 1
statement 2
statement 3
MIT TRANSACTION
问与答
问 如果我有一组事务 其中一个是不成功的 我是否可以确认其它的事务过程
答 不可以 必须整组的事务都是成功的才可以
问 在使用的 MIT 命令以后 我发现我犯了一个错误 那么我怎样才能更正这个错
236
…………………………………………………………Page 237……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
误
答 使用 DELETE INSERT 或 UPDATE 语句 ROLLBACK 在这时是不行的
问 在怎个事务结束以后我都必须使用 MIT 命令确认吗
答 不必 但是在确认没有错误而且在之前没有事务在运行时使用 MIT 会更安全
校练场
1 在嵌套的事务中 是否可以使用 ROLLBACK 命令来取消当前事务并回退到上级事务
中 为什么
2 使用保存点是否可以保存事务的一部分 为什么
3 MIT 命令是否可以单独使用 它一定要嵌套吗
4 如果你在 MIT 命令后发现的错误 你是否还可以使用 ROLLBACK 命令
4 在事务中使用保存点是否可以自动地将之前的改动自动地保存
练习
1 使用 PERSONAL ORACLE7 的语法来更正下边的语法
SQL》 START TRANSACTION INSERT INTO CUSTOMERS VALUES ('SMITH'; 'JOHN')
SQL》 MIT
2 使用 PERSONAL ORACLE7 的语法来更正下边的语法
SQL》 SET TRANSACTION
UPDATE BALANCES SET CURR_BAL = 25000
SQL》 MIT
3 使用 PERSONAL ORACLE7 的语法来更正下边的语法
SQL》 SET TRANSACTION
INSERT INTO BALANCES VALUES ('567。34'; '230。00'; '8')
SQL》 ROLLBACK
237
…………………………………………………………Page 238……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
第 12 天 数据库安全
今天我们来讨论一下数据库的安全问题 我们已经很清楚地看到不同的 SQL 语句可以
使我们具有管理关系型数据库系统的能力 与我们到今天为止所学习的其它主题一样 一
个数据库管理系统是如何在不同的产品中实现安全的呢 对于这个问题我们今天将以流行
的 ORACLE 7 数据库系统为例 到今天的结束时我们将具有以下能力
l 创建用户
l 更改密码
l 创建角色
l 为安全的目的而使用视图
l 在视图中使用同义词
前提 数据库管理员
安全问题在数据库的设计过程中常常会被忽略 许多计算机工作人员在进入计算机领
域时有计算机的编程知识或硬件知识 并且他们也会将精力注重于这一方面 例如 如果
你的老板要求你开展一个新的项目 而这个项目很明显地需要一个关系型的数据库时 那
你第一步想要做的工作是什么 在确定的相应的硬件和软件平台以后 你也许会开始设计
项目中的基本的数据库结构了 这一阶段会分给许多人去做 其中一些人是图形用户界面
设计者 另一些底层组件的设计者 也许你在读过本书以后会要求编写用于提供给客户应
用程序所使用查询的 SQL 代码 而与这项任务随之而来的是你可能会成为一个数据库的管
理和维护人员
在很多时候 当我们在真正实施这个项目时我们需要考虑或计划到一点 那就是当众
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!