友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
SQL 21日自学通(V3.0)(PDF格式)-第27部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
ROWID 字段作为主关键字有许多理由 首先 对于整数值的归并操作要远远快于对一个
长度为 80 个字符的字符串的归并操作 因为整数的存储长度小于字符串 所以最终归并的
结果集也将小于字符串的归并结果集 此外的一个好处是使用 ROWID 字段你可以看到表
的组织情况 而字符则会产生数字输入的问题 例如 当一个人输入了 111 First Street 而
183
…………………………………………………………Page 184……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
另一人输入了 111 1st Street 时会有什么情况发生 如果又有一个输入了 111 1st St。呢 在
今天的图形用户界面环境下 正确的字符串会被输入到一个列表框中 当用户从列表框中
选择的时候 代码会将字符串变换成为一个唯一的 ID 号并将这个号码存储在数据库中
到现在为止 你可以用你在今天所学过的东西来创建一个表了 随后我们将在今天使
用这些表 所以你应该在表中输入一些数据 使用昨天的 INSERT 命令可以向表中加入表
9。3 9。4 和 9。5 中的数据
INPUT/OUTPUT
SQL》create database PAYMENTS
Statement processed。
SQL》create table BILLS (
2 NAME CHAR(30) NOT NULL;
3 AMOUNT NUMBER;
4 ACCOUNT_ID NUMBER NOT NULL);
Table created。
SQL》 create table BANK_ACCOUNTS (
2 ACCOUNT_ID NUMBER NOT NULL;
3 TYPE CHAR(30);
4 BALANCE NUMBER;
5 BANK CHAR(30));
Table created。
SQL》 create table PANY (
2 NAME CHAR(30) NOT NULL;
3 ADDRESS CHAR(50);
4 CITY CHAR(30);
5 STATE CHAR(2));
Table created。
Table 9。3。 Sample data for the BILLS table。
Name Amount Account_ID
Phone pany 125 1
Power pany 75 1
184
…………………………………………………………Page 185……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
Name Amount Account_ID
Record Club 25 2
Software pany 250 1
Cable TV pany 35 3
Table 9。4。 Sample data for the BANK_ACCOUNTS table。
Account_ID Type Balance Band
1 Checking 500 First Federal
2 Money Market 1200 First Investor's
3 Checking 90 Credit Union
Table 9。5。 Sample data for the PANY table
Name Address City State
Phone pany 111 1st Street Atlanta GA
Power pany 222 2nd Street Jacksonville FL
Record Club 333 3rd Avenue Los Angeles CA
Software pany 444 4th Drive San Francisco CA
Cable TV pany 555 5th Drive Austin TX
表的存储与尺寸的调整
大多数 RDBMS 都设定了表的默认大小和存储的定位 如果你没有指定表的大小和存
储大小它就会采用默认值 它可能是非常不合适的 特别对于大型的表来说更是如此 默
认大小根据解释器和不同而不同 下边是一个在创建表时使用 STORAGE 子句的例子 对
于 ORACLE 而言
INPUT
SQL》 CREATE TABLE TABLENAME
2 (COLUMN1 CHAR NOT NULL;
3 COLUMN2 NUMBER;
4 COLUMN3 DATE)
5 TABLESPACE TABLESPACE NAME
6 STORAGE
7 INITIAL SIZE;
8 NEXT SIZE;
9 MINEXTENTS value;
185
…………………………………………………………Page 186……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
10 MAXEXTENTS value;
11 PCTINCREASE value);
OUTPUT
Table created。
分析
在 ORACLE 中你可以指定需要存放的表的大小 定夺的依据是可用空间的大小 经常
是由数据库管理人员来决定 INITIAL SIZE 表的初始长度 最初的分配空间 NEXT SIZE
是指追加的长度 MINEXTENTS 和 MAXEXTENTS 用于指定表的最小和最大长度
PCTINCREASE 则指明表每次追加的百分比或进行下一次追加
用一个已经存在的表来建表
CREATE TABLE 是最为通用的建表的方法 然而 在一些数据库管理系统中提供了一
种可供选择的方法 — — 使用已经存在的表中的格式和数据 当你对表进行临时改动需要将
数据选出时这种方法是很有用的 当你要创建的表与已有的表类似并且其内容也类似时它
也非常有用 你不必须重新输入这些信息 在 ORACLE 中它的语法如下
SYNTAX
CREATE TABLE NEW_TABLE(FIELD1; FIELD2; FIELD3)
AS (SELECT FIELD1; FIELD2; FIELD3
FROM OLD_TABLE
它的语法允许你建立一个字段类型与已有表中选出的字段类型相同的新表 你也可以
对新表中的字段进行重命名
INPUT/OUTPUT
SQL》 CREATE TABLE NEW_BILLS(NAME; AMOUNT; ACCOUNT_ID)
AS (SELECT * FROM BILLS WHERE AMOUNT 《 50);
Table created。
分析
上边的语句用 BILL 表中 AMOUNT 小于 50 的记录创建了一个新表
在一些数据库系统中你也可以使用下边的语法
SYNTAX
186
…………………………………………………………Page 187……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
INSERT NEW_TABLE
SELECT from OLD_TABLE
上边的语法格式将会严格地按照原有表的字段格式和数据建立一个新表 下边用 SQL
Server 的Transact…SQL 来对它进行举例
INPUT
INSERT NEW_BILLS
1》 select * from BILLS where AMOUNT 《 50
2》 go
go 语句在 SQL SERVER 中是处理 SQL 缓冲区内指令的命令 它的作用等同于在
ORACLE 中的分号
ALTER TABLE 语句
没有道理为每件事对你的数据库进行多次的设计 但又确实需要对数据库和应用程序
进行改动 那么 ALTER TABLE 语句可以让数据库的设计者或设计人员在表创建以后修改
它的结构
ALTER TABLE 语句可以帮助你做两件事
l 加入一列到已经存在的表中
l 修改已经存在的表中的某一列
ALTER TABLE 语句的语法如下
SYNTAX
ALTER TABLE table_name
下边的命令会将 BILL 表中的 NAME 字段改为长度 40 个字符
INPUT/OUTPUT
SQL》 ALTER TABLE BILLS MODIFY NAME CHAR(40);
Table altered。
注 你可以增加或减少某一列的长度 但是你不能将它减少到使修改后的长度小于其中的
已有数据长度
下边的语句是向 NEW_BILLS 表中加入一个新列
187
…………………………………………………………Page 188……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
INPUT/OUTPUT
SQL》 ALTER TABLE NEW_BILLS
2 ADD MENTS CHAR(80);
Table altered。
分析
这条语句会加入一个叫 MENTS 的长度为 80 个字符的字段 该字段会加在已有
字段的右边
在使用 ALTER TABLE 时会有许多限制 你不能用它来对一个数据库增加或删除字段
它可以将一个列由NOT NULL 改变为NULL 而不必使用其它方法 但是如果想把列由NULL
改变为 NOT NULL 时则要求指定的字段中不能有 NULL 值 想把某一列由 NOT NULL 改
变为 NULL 可以使用下边的语法
SYNTAX
ALTER TABLE table_name MODIFY (column_name data_type NULL)
如果想把一列由 NULL 改变为 NOT NULL 你必需经过以下步骤
1 确认要改变的列中有没有 NULL 值
2 删掉你所发现的任何 NULL 值 删除该记录 更新这一记录等等
3 使用 ALTER TABLE 命令
注 在一些数据库管理系统中允许使用 MODIFY 子句 另外一些则不可以 而又有
一些在 ALTER TABLE 中加入了其它的子句 在 ORACLE 中 你甚至可以修
改表的存储参数 请检查你的解释器以找出它对 ALTER TABLE 的确实用法
DROP TABLE 语句
SQL 提供了一个可以从数据库去彻底地移去某个表的命令 DROP TABLE 可以从数据
库中删除一个指定的表以及与之相关联的索引和视图 在第 10 天会进行更详细的讨论
一旦这个命令发出以后 就没有办法可以彻消它 它最常用在你创建一个临时表 并且已
经进行完毕了你的全部计划工作的时候 DROP TABLE 语句的语法格式如下
SYNTAX
DROP TABLE table_name
下边是如何删掉一个叫 NEW_BILLS 表的实例
188
…………………………………………………………Page 189……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
INPUT/OUTPUT
SQL》DROP TABLE NEW_BILLS
Table dropped。
分析
请注意 系统没有给出你提示 该命令不会问你 Are you sure? Y/N 但是删除操作
已经执行 表已经永远地删除了
警告
如果你执行了
SQL》 DROP TABLE NEW_BILLS
如果你想正确地删除一个表 那么在删除表的时候最好给出它的所有都 所属的数据
库 或工程的名字 推荐的使用方法如下
SQL》 DROP TABLE OWNER。NEW_BILLS
我只所以强调这种使用方法是因为我曾经挽救过一个被错误删除了的表格 它被删除
的原因是因为没有准确地给出其所属工程的名字 修复那个数据库用了八个小时 我们一
直工作到了深夜
DROP DATABASE 语句
一些数据库管理系统也提供了删除数据库 DROP DATABASE 的语句 它的使用方
法与 DROP TABLE 相同 语法如下
DROP DATABASE database_name
请不要删掉 BILLS 数据库 我们在今天的后边还要用它 而且在第 10 天也要用
注 不同的关系数据库解释器提供了不同的删除数据库的方法 在数据库被删除以后 我
们需要清理掉操作系统用以构建数据库的文件
练习 9。2
创建一个数据库并在其中创建一个表 试验 DROP TABLE 和 DROP DATABASE 命令
数据库系统是否会允许你这样做 单文件的数据库系统如 ACCESS 是不支持这个命令的
数据库包含在一个单一的文件中 如果想建立一个数据库 你必须用系统提供的菜单选项
如果想删掉它 只需简单地从系统中删掉这个文件就可以了
189
…………………………………………………………Page 190……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
总结
第 9 天讲述了数据处理语言 DML 的主要内容 具体说来是你学习了五个新的语句
CREATE DATABASE CREATE TABLE ALTER TABLE DROP TABLE DROP DATABASE
在今天的课程中我们也讨论了一个好的数据库设计方案的重要性
当你在创建并设计一个数据库的时候数据字典是一个重要的文档资料 字典中有对数
据库的详细的描述 包括 表 字段 视图 索引 存储过程 触发机制等等 一个完备
的数据字典中应该有对数据库中的每一个内容的详细注释 每当你对数据库进行过修改以
后你都应及时的更新数据字典
在使用数据库处理语句时 设计一个好的数据库是非常重要的 把数据分组逻辑组并
建立主关键字以使其它的逻辑组正确地识别它 可以使用外部关键字来指向该表的主关键
字或在该表中用外部关键字与其它的表相关联
我们已经知道了建立数据库语句不是一个数据库系统的必需内容 因为不同的数据库
供应商有不同的数据库组织形式 每一种解释器都有它们自己的特点和选项 从而导致了
建立数据库语句的截然不同 只使用 CREATE DATABASE database_name 可以在大多数系
统中用默认的参数来创建一个默认的数据库 而 DROP DATABASE 语句则可以永久地删
除一个数据库
使用 CREATE TABLE 语句可以建立一个新的表 使用该命令你可以建立字段并定义
它们的数据类型 在一些数据库管理系统中你还可以指定字段的其它属性 例如是否它可
以接受空值以及它的内容是否在本表中应该是唯一的 而 ALTER TABLE 语句可以对已存
在的表的结构进行修改 DROP TABLE 语句可以永久地删除一个表格
问与答
问 为什么 CREATE DATABASE 语句在不同的数据库中使用方法是不同的
答 这是因为不同的数据库系统在建立数据库时的实际过程是不同的 基于 PC 机的
小型数据库系统通常依赖文件来建立某些应用程序 而在大型服务器上运行的分
布式数据库中的需用数据库文件通常是分布在多个磁盘驱动器上的 当你的代码
访问数据库的时候 运行于电脑上的数据库程序不会像访问你的磁盘上的文件那
样直接 更大的数据库系统还要对磁盘的空间进行估算以支持一些特性如安全性
190
…………………………………………………………Page 191……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
传输控制以及内嵌于数据库的存储过程 当你的程序访问数据库时 数据库的服
务程序通常需要对你的请求 通常与其它的请求一起 经过复杂的中间过程才会
返回数据 这一主题将在第 3 周讨论 现在 你应该知道为什么不同的数据库系
统建立和管理数据库的方法不同的
问 我能否建立一个临时表并且的工作完成后它会自动地删除
答 可以 许多数据库管理支持临时表的概念 该类型的表可以在你的过程运行结束或你
使用 DROP TABLE 语句后删除 我们将在第 14 天的 动态应用 SQL 中讨论临时表
问 我是否可以用 ALTER TABLE 语句来删除一个表
答 不行 该语句只可以用来增加或修改表中的某一列 如果你想删除一列 你可以建立
一个新表并将旧表中的数据有选择地复制到新表中然后再删除旧表
校练场
1 ALTER DATABASE 语句经常用在修改已有表的结构上 对不对
2 DROP TABLE 语句与 DELETE FROM 的作用是相同的 对不对
3 可以使用 CREATE TABLE 命令向数据库中加入一个新表 对不对
4 为什么下边的语句是错误的
INPUT
CREATE TABLE new_table (
ID NUMBER
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!