按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
结果看上去是正确的 但是这只是在数据输入的开始时 在几个月以后 你已经在NAME
字段中输入了许多公司的账单 每当向 BILL 表中加入一个新记录的时候 公司的
ADDRESS CITY 以及 STATE 就有可能出现重复 当记录增加到成千上万时重复的数据
也在相应的增加 类似的情况也可能在 10 20 或 30 个表中出现 你现在知道数据库标准
化设计的重要性了吧
在你向表中输入数据之前 你应该知道如何来创建一个表
CREATE TABLE 语句
建立表的过程比建立数据库的过程更不标准 它的基本语法如下
SYNTAX
CREATE TABLE table_name (field1 datatype ' NOT NULL '
field2 datatype ' NOT NULL '
180
…………………………………………………………Page 181……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
field3 datatype ' NOT NULL '。。。)
它的一个简单的例子如下
INPUT/OUTPUT
SQL》CREATE TABLE BILLS (
2 NAME CHAR(30)
3 AMOUNT NUMBER
4 ACCOUNT_ID NUMBER)
Table created。
分析
该语句创建了一个名字叫 BILL 的表 在 BILL 表中有三个字段 NAME ACCOUNT
和 ACCOUNT_ID 其中 NAME 字段为字符类型可以存储长度 30 的字符串 而 AMOUNT
和 AMOUNT_ID 则只参存储数字
下边的部分对 CREATE TABLE 命令作进一步的解释
表名
当使用 PERSONAL ORACLE 来创建一个表的时候 对表的命名要遵从几个约束 首
先 表的名字不得超过 30 个字符长 由于 ORACLE 对大小写不敏感 所以在写名字时你
可以根据需要采用大写或小写的方式 但是表的第一个字符必须是字母 A…Z 其余的字
符则还可以有下划线 # @ 当然 在本工程中表的名字不应该有重复 表的名字也
不可以是 ORACLE 的保留字 如 SELECT
注 你可以在不同的所有者或工程中使用相同的表的名字 但在同一个工程中表的名字必
须保证唯一
FIRST NAME
如果你有过用任何一种语言进编程的经验 你会有类似的关于数据类型的概念 指定
的字段只能存放特定的数据类型 例如 字符型字段只能存放字符型数据类型 表 9。2 显
示了 ORACLE 支持的数据类型
ORACLE 所支持的数据类型
181
…………………………………………………………Page 182……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
数据类型 说 明
CHAR 可以存储长度为 1~255 个字符的字符串 空格会被填充到字符串的右边以保
证其内容满足定义的长度
DATE 包括日期的世纪 年 月 日时 分 秒
LONG 可以支持长达 2G 的字符串 见下注
LONG RAW 可以存储长达 2G 的二进制内容 见下注
NUMBER 零 正值或负值的定点或浮点数
RAW 可以存储长不过 255 个字节的二进制代码
ROWID 用一个十六进制的数来标明当前行在表内的唯一地址 见下注
VARCHAR2 变长的字母或数字 长度可以从 1 到 2000
注 LONG 数据类型在其它的数据库系统中常被称为备注类型 它主要用于存储大量的可
以在稍后返回的文本内容
LONG RAW 类型在其它数据库系统中常被称为大二进制类型 BLOB 它可以用
来存储图形 声音 视频数据 尽管关系型数据库管理系统最初不是为它们而设计的 但
是多媒体数据可以存储在 BLOB 或 LONG RAW 类型的字段内
ROWID 常用在可以将你的表中的每一条记录都加以唯一标识的场合 许多关系型
数据库管理系统用 COUNTER 如 ACCESS 或 IDENTITY SQL SERVER 来表达这个
概念
注 请检查你的解释器看它们是否对数据类型的支持有所变化
空值属性
SQL 也可以让你鉴别在一个列中是否已经存入的数值 NULL 只是一个修饰 因为如
果一个字段的内容为 NULL 的话实际上是说这个字段中没有东西也没有
在建立表的时候 大多数数据库管理系统允许你用 NOT NULL 来指明字段是否为非空
属性 NOT NULL 的意思就是在当前表的该字段中不能有任何记录存在空值 也就是说在
当前表中的该字段的每一个记录中都应该确实存在数值 下例给出了 NOT NULL 的用法
INPUT
SQL》CREATE TABLE BILLS (
2 NAME CHAR(30) NOT NULL;
182
…………………………………………………………Page 183……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
3 AMOUNT NUMBER;
4 ACCOUNT_ID NOT NULL);
分析
在这个例子中如果你想把公司的账转到你自己的名下 如果 NAME 区和 ACCOUNT_ID
区没有内容 那么这种存储是没有任何意义的 你也许可以在记录中给出账单号 但是你
无法收取
下例中的第一个语句插入正确的数据以便为支付 JOE 的25 电脑服务费
INPUT/OUTPUT
SQL》 INSERT INTO BILLS VALUES(〃Joe's puter Service〃; 25; 1)
1 row inserted。
INPUT/OUTPUT
SQL》 INSERT INTO BILLS VALUES(〃〃; 25000; 1)
1 row inserted。
分析
注意 在上边的第二个例子中没有给出 NAME 的名字 你也许会认为这是一件好事
因为没有收款人却收取了 25000 元 但是我们不这样认为 如果 NAME 字段在创建时指
定的非空属性 那么在第二个例子中就会产生一个错误
唯一属性
你在设计表时的一个目标是要保证在表中有一个列的值是唯一的 这列或这个字段被
称为主关键字 在一些数据库管理系统中允许你将某一列设成唯一值属性 如 ORACLE 和
SQL Server 可以让你对一个字段加以唯一值索引 见第 10 天 这一特性可以保证你不
在该字段中插入重复的数值
在选择主关键字段时有几个需要注意的问题 我们曾经说过 ORACLE 提供了一个
ROWID 字段 它对于每一行均会自动递增 因此默认情况下它总是一个唯一的数值 将
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