友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
SQL 21日自学通(V3.0)(PDF格式)-第25部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
进行更新操作 其语法表达如下
SYNTAX
UPDATE table_name SET columnname1 = value1 '; columname2 = value2'。。。
FROM table_list WHERE search_condition
例 8。6
这是一个实例
INPUT
SQL》 UPDATE COLLECTION SET WORTH = WORTH * 0。005
INPUT/OUTPUT
SQL》 SELECT * FROM COLLECTION
ITEM WORTH REMARKS
NBA ALL STAR CARDS 2。775 SOME STILL IN BIKE SPOKES
MALIBU BARBIE 2。775 TAN NEEDS WORK
STAR WARS GLASS 2。775 HANDLE CHIPPED
LOCK OF SPOUSES HAIR 2。775 HASN'T NOTICED BALD SPOT YET
SUPERMANS CAPE 2。775 TUGGED ON IT
STRING 2。775 SOME DAY IT WILL BE VALUABLE
分析
该语法在当给定表需要更新的内容源自于其它多个表的时候非常有用 切记该语法不
是标准语法 在使用它之前请先查看一下你所使用的数据库的文档看一看它是否为你的数
据库系统所支持
UPDATE 语句也可以用一个数学运算式的结果来对给定数据进行更新操作 当使用这
项技术时 必须注意你所使用的表达式结果与需要更新的数据字段为同一种数据类型 而
167
…………………………………………………………Page 168……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
且其长度也要与被更新字段的定义长度相符
当使用计算值时可能会有两个问题产生 截断和溢出 例如当将一个小数转换为整数
时可能会有截断的情况产生 而当计算的结果超过了该字段的定义数据长度时会导致溢出
这会使你的数据库返回一个错误
注 一些数据库系统可以为你处理溢出问题 ORACLE 7 可以在这时将其转成指数形式以
避免错误 但是你要清楚在使用数据类型时这种错误存在的可能性
技巧 如果在你更新列的以后发现了错误 你可以使用 ROLLBACK 语句来取消更新操作
就像你对 INSERT 所做的那样 关于该命令在第 11 天会有更多的介绍
DELETE 语句
与向数据库中加入数据相对应 你可能需要删除数据库中的数据 DELETE 语句的语
法格式如下
SYNTAX
DELETE FROM tablename WHERE condition
对于 DELETE 命令你需要注意的第一件事就是它不会出现确认提示 而用户似乎已经
习惯于确认提示了 举例来说 当我们在操作系统中删除了某个文件或目录时 Are you sure?
(Y/N)经常会在命令执行之前出现 在使用 SQL 时 当你告诉 DBMS 从表中删除一组记录
时 它会执行你的命令而不提问 也就是说 当你用 SQL 的 DELETE 命令删除记录时
它确实已经执行了删除操作
在第 11 天中我们将会学习到事务处理控制 事务控制是一种数据库处理机制 它允许
编程人员确认或撤消对数据库的改变 该操作对于在线事务处理程序中采用批处理方式对
数据库进行改动时非常有效 然而如果同一时间又有其他的用户也在进行数据修改操作时
将会导致引用完整性错误 现在 假设不存在事务处理机制
注 对于一些解释器 例如 ORACLE 当你在即出 SQL 的时候会自动地调用确认操作
通过 DELETE 语句和 WHERE 子句 DELETE 语句可以完成下边的工作
l 删除单一的行
l 删除多个行
l 删除所有的行
168
…………………………………………………………Page 169……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
l 什么也不删除
在使用 DELETE 语句时需要注意以下几点
l DELETE 不能删除个别的字段 它对于给定表只能整个记录整个记录地删除
l 与 INSERT 和 UPDATE 一样 删除一个表中的记录可能会导致与其它表的引
用完整性问题 当对数据库进行修改时一定在头脑中有这个概念
l DELETE 语句只会删除记录 不会删除表 如果要删除表需使用 DROP TABLE
命令 参见第 9 天
例 8。7
下例显示了如何删除 COLLECTION 表中的 WORTH 小于 275 的所有记录
INPUT
SQL》 DELETE FROM COLLECTION WHERE WORTH 《 275
4 rows deleted。
之后表的内容如下
INPUT/OUTPUT
SQL》 SELECT * FROM COLLECTION
ITEM WORTH REMARKS
NBA ALL STAR CARDS 300 SOME STILL IN BIKE SPOKES
STRING 1000 SOME DAY IT WILL BE VALUABLE
注 与 UPDATE 语句一样 如果你省略了 WHERE 子句 那么表中的所有记录都会被删除
例 8。8 中则使用了三种数据操作语句来完成一个数据操作过程
例 8。8
INPUT
SQL》 INSERT INTO COLLECTION VALUES('CHIA PET'; 5;'WEDDING GIFT')
OUTPUT
1 row created。
INPUT
SQL》 INSERT INTO COLLECTION
2 VALUES('TRS MODEL III'; 50; 'FIRST PUTER');
OUTPUT
169
…………………………………………………………Page 170……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
1 row created。
现在 建立一个新表并向其中复制数据
INPUT/OUTPUT
SQL》 CREATE TABLE TEMP (NAME CHAR(20); VALUE NUMBER; REMARKS CHAR(40))
Table created。
INPUT/OUTPUT
SQL》 INSERT INTO TEMP(NAME; VALUE; REMARKS)
2 SELECT ITEM; WORTH; REMARKS FROM COLLECTION;
4 rows created。
INPUT/OUTPUT
SQL》 SELECT * FROM TEMP;
NAME VALUE REMARKS
NBA ALL STAR CARDS 300 SOME STILL IN BIKE SPOKES
STRING 1000 SOME DAY IT WILL BE VALUABLE
CHIA PET 5 WEDDING GIFT
TRS MODEL III 50 FIRST PUTER
现在 改变其中的数值
INPUT/OUTPUT
SQL》 UPDATE TEMP SET VALUE = 100 WHERE NAME = 'TRS MODEL III'
1 row updated。
INPUT/OUTPUT
SQL》 UPDATE TEMP SET VALUE = 8 WHERE NAME = 'CHIA PET';
1 row updated。
INPUT/OUTPUT
SQL》 SELECT * FROM TEMP;
NAME VALUE REMARKS
NBA ALL STAR CARDS 300 SOME STILL IN BIKE SPOKES
STRING 1000 SOME DAY IT WILL BE VALUABLE
CHIA PET 8 WEDDING GIFT
TRS MODEL III 100 FIRST PUTER
然后将这些数据更新回原始表中
170
…………………………………………………………Page 171……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
INPUT
INSERT COLLECTION SELECT * FROM TEMP
DROP TABLE TEMP
分析
关于 CREATE TABLE 和 DROP TABLE 语句将在第 9 天作详细讨论 现在 这些语句
的作用基本上与它们的名字是一样的 CREATE TABLE 会按照你给的格式建立一个新表
而 DROP TABLE 则会删除表 切记 DROP TABLE 会删除中而 DELETE 只会删除表中的记
录
为了验证你的工作 你可以选出 COLLECTION 表中的内容 你会看到你改动后的结
果
INPUT/OUTPUT
SQL》 SELECT * FROM COLLECTION;
NAME VALUE REMARKS
NBA ALL STAR CARDS 300 SOME STILL IN BIKE SPOKES
STRING 1000 SOME DAY IT WILL BE VALUABLE
CHIA PET 8 WEDDING GIFT
TRS MODEL III 100 FIRST PUTER
分析
上边的例子使用了所有的操作数据的三个语句 INSERT UPDATE 和 DELETE 来对
一个表完成一组操作 DELETE 是这三个语句中最容易使用的
警告 切记对数据的操作可能会导致引用完整性问题 你要认真地检查数据库中所有表的
所有记录以确保正确无误
从外部数据源中导入和导出数据
INSERT UPDATE 和 DELETE 语句对于数据库程序而言是非常有用的 它与 SELECT
语句一起为你将要进行的其它数据操作奠定了基础 然而 SQL 作为一种语言并不提供从
外部数据源中导入和导出数据的方法 例如 以前你的办公室用了多年的 dBASE 数据库
而现在不准备再使用了 你的领导想把它转为具有服务器/ 客户机功能的 ORACLE 的
RDBMS 系统 显然 INSERT UPDATE 和 DELETE 语句将会帮助你完成移植工作 前提
是你想输入 300;000 个记录 幸运的是 ORACLE 和其他的数据库制造商已经为你提供了完
171
…………………………………………………………Page 172……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
成这种任务的工具
几乎所有的数据库系统都可以导入或导出 ASCLL 码的文本文件 尽管 SQL 语言没有
这个功能 SQL 不会做得比从一个空数据库开始更好 我们可以使用下列产品中的导入和
导出工具 它们是 Microsoft Access Microsoft 和 Sybase SQL Server 以及Personal Oracle7
Microsoft Access
Microsoft Access 是一个其于 PC 的数据库产品 它具有许多关系数据库管理系统的特
点 Microsoft Access 也有强大的报表功能 与 Visual Basic 类似的宏语言以及从其他的数
据库系统和文本文件中导入或导出数据的能力 本部分讲最后边的一种 — — 从分界文本文
件中导入或导出数据 分界的意思就为每个字段采用特殊的分界符来划定界限 一般常用
的分界符是逗号 引号和空格
Access 允许你从其他的数据库系统中导入和导出数据 这些数据库系统包括 dBASE
FoxPro SQL 数据库 其中 SQL 数据库其实是 ODBC 数据链接 Microsoft ODBC 将在第
13 天的 高级 SQL 主题 中提到 本例中我们讨论文本文件的导入导出过程
在打开 Access 数据库以后 使用文件|打开 选择导出 此时将会出现一个对话框
选择文本文件 宽度固定 选项 Access 将会把数据库中的表导出到一个每一个数据类型
都有固定宽度的文本文件中 例如 如果字符字段宽度为 30 就会向文本文件中输出一个长
为 30 的字符串 如果字符串不足 30 就会用空格补足 最后 会问你文本文件的存放地
点 下图显示了导入/导出对话框
172
…………………………………………………………Page 173……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
注意在这个对话框中你可以选择文本宽度和字段分隔符 最后一步是保存与使用有关
的注释内容 注释会存储在数据库的内部
Microsoft and Sybase SQL Server
Microsoft 与 Sybase 公司共同开发了新一代的功能强大的服务/客户数据库系统 它就
是 SQL Server Microsoft 已经同意了在一些平台上开发RDBMS 版本 SyBase 则在其他平
台上已经开发了他的数据库版本 通常是大型化的 虽然在近几年协议有所改变 但提到
这个协议可以让我们避免对近几年的数据库系统的版本混淆
SQL Server 提供的数据导入和导出的工具叫 BCP BCP 是 BULK COPY 的缩写
它的主要内容与 ACCESS 的相同 但是不幸的是 BCP 需要你在提示符下输入命令而不是
在窗口中使用对话框
BCP 可以导出固定宽度的文本文件 在 SQL Server 中使用它导入文件要比使用ACCESS
直接 但 ACCESS 更容易使用 BCP 使用格式化文本 通常扩展名为。FMT 来存储导出
的说明 说明文件告诉 BCP 导出文件的列名 字段宽度以及字段分隔符 你可以当数据库
建好后在 SQL 内部使用BCP 来建立一个关于数据库结构的说明
Personal Oracle7
Personal Oracle7 允许你导出文本文件 文本文件的字段宽度与源库定义的字段宽度相
同 使用的工具是 SQL*Loader 这个图形工具使用一个控制文件 扩展名为。CTL 这个
文件类似与 SQL Server 的格式文件 。FMT 它的内容是告诉 SQL*Loader 数据文件的位
置
SQL*Loader 的界面见下图
173
…………………………………………………………Page 174……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
总结
SQL 对于操作数据提供了三条语句
INSERT 语句有二个变体 INSERT VALUES 可以插入一个记录 而 INSERT SELECT
则可以根据给定的一个或多个表来插入一个或多个记录 SELECT 语句可以归并多个表
并把归并的结果加入到另外一个表中
UPDATE 语句可以改变符合条件列的值 UPDATE 语句可以用计算或表达式的结果作
为需要更新的内容
DELETE 语句是这三个语句中最简单的 它会删除符合 WHERE 条件的所有记录 如
果没有 WHERE 子句 它会删除表中的所有记录
现代的数据库系统提供了许多的数据库操作的工具 其中一些工具可以让开发人员从
外部数据源中导入或导出数据 这在当数据库向大系统或小系统上移植时非常有用
Microsoft Access Microsoft 和 Sybase 的SQL Server 以及Personal Oracle7 都提供了这样的
移植工具
问与答
问 SQL 有导入或导出操作的语句吗
答 没有 这一操作是解释器的附加功能 也就是说 ANSI 委员会允许制造商进行他
们认为是需要的工作
问 我可以使用 INSERT 语句从一个表中抟贝数据到它自身吗 我想复制所有记录的
内容而只对其中一个字段的内容作更改
答 不能 INSERT 语句中的表不能与 FROM 中的表相同 但是 你可以将它复制到
一个临时的表格中 这将在第 14 天讨论 然后对临时表格的内容作修改后再将它复制回
原始表 要检查你的表的具有唯一值属性的字段 唯一值属性将只允许一个数值在该列中
出现一次
问 我注意到了关于 INSERT UPDATE 和 DELETE 语句的警告 是否我可以对我所
犯的错误进行修正 如果是的话 是那条语句可以完成这种工作
答 是的 例如 你可以使用 ROLLBACK 来撤消 INSERT UPDATE 或 DELETE 的
操作
174
…………………………………………………………Page 175……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
但是如果你向表中插入了多个记录后没有发现错误就使用了 MIT 命令 几个星
期后别人发现了错误 这时你可能要花上两个星期的时间来对数据库的数据进行逐条的检
查 大多数情况下你可能不知道错在哪里 所以你只好恢复数据库
校练场
1 下边的语句有什么错误
DELETE COLLECTION
2 下边的语句有什么错误
INSERT INTO COLLECTION SELECT * FROM TABLE_2
3 下边的语句有什么错误
UPDATE COLLECTION (〃HONUS WAGNER CARD〃 25000; 〃FOUND IT〃)
4 如果执行下边的语句会有什么结果
SQL》 DELETE * FROM COLLECTION;
5 如果执行下边的语句会有什么结果
SQL》 DELETE FROM COLLECTION;
6 如果执行下边的语句会有什么结果
SQL》 UPDATE COLLECTION SET WORTH = 555
SET REMARKS = 'UP FROM 525';
7 下边的语句是否会工作
SQL》 INSERT INTO COLLECTION SET VALUES = 900 WHERE ITEM = 'STRING'
8 下边的语句是否会工作
SQL》 UPDATE COLLECTION SET VALUES = 900 WHERE ITEM = 'STRING'
练习
1 试着向一个表中插入一个不正确的数据类型 看一下出错信息 然后再插入一
个正确的数据类型
2 试着使用你的数据库系统将某个表导出为其他库格式 然后再把它导入 熟悉
一下你的数据库系统的导入与导出操作 并试着用其它数据库操作导出文件
175
…………………………………………………………Page 176……………………………………………………………
SQL 21 日自学通(V1。0)
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!