按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
论三个关于如何对数据库中的表中的数据进行操作的三条语句 这三条语句是
INSERT 语句
UPDATE 语句
DELETE 语句
在过去 你也许使用过基于 PC 机的数据库系统 如 ACCESS dBASE IV 和 FOXPRO
这些产品提供了很好的输入 编辑和删除数据的工具 这就是 SQL 为什么提供了对数据进
行编辑的基本语句可又允许用户使用应用程序自带的工具进行编辑的原因 SQL 的程序员
应该具有将数据送入数据库中的能力 此外 大型的数据库系统常常不能按照数据库设计
和编程人员的意图来进行设计 因为这些数据库系统是为大容量和多用户环境准备的 所
以它的设计重点放在了如何优化查询和数据引擎上了
大多数商业化的数据库系统都提供了导入导出数据的工具 数据被存储在有分隔符的
文本文件之中 格式化的文本文件常常存储着与表相关的信息 相关的工具如 ORACLE 的
SQL*Loader SQL Server's bcp bulk copy 以Microsoft Acces 的导入和导出数据的工具都
将在今天提到
注 今天的例子是用 Personal Oracle7 做的 请注意它与其它的命令解释器在语句上和数据
158
…………………………………………………………Page 159……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
返回的形式上的不同之处
插入语句
INSERT 语句允许你向数据库中输入数据 它有两种写法
INSERT VALUES 和 INSERT SELECT
INSERT VALUES 语句
该语句每次向表中输入一条记录 如何操作的规模小 只有几条语句需要输入时它是
非常有用的 该语句的语法形式如下
SYNTAX
INSERT INTO table_name (col1; col2。。。) VALUES (value1; value2。。。)
该语句的作用是向表中加以一个新的记录 其数值为你所指定的数值 使用该语句向
表中插入数据时你必须遵循以下三条规则
l 你所要插入的数值与它所对应的字段必须具有相同的数据类型
l 数据的长度必须小于字段的长度 例如 你不能向一个长 40 个字符的字段中插入
一个长 80 个字符的字符串
l 插入的数值列表必须与字段的列表相对应 也就是说第一个数值在第一个字段
第二个数值在第二个字段
例 8。1:
假定你有一个 COLLECTION 的表中存储着你所收集的材料 你可以用下边的语句来
查看其中的内容
INPUT
SQL》 SELECT * FROM COLLECTION
OUTPUT
ITEM WORTH REMARKS
NBA ALL STAR CARDS 300 SOME STILL IN BIKE SPOKES
MALIBU BARBIE 150 TAN NEEDS WORK
STAR WARS GLASS 5。5 HANDLE CHIPPED
LOCK OF SPOUSES HAIR 1 HASN'T NOTICED BALD SPOT YET
如果你想向表中加入一个新记录 你可以像这样写
159
…………………………………………………………Page 160……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
INPUTOUTPUT
SQL》 INSERT INTO COLLECTION (ITEM; WORTH; REMARKS)
VALUES('SUPERMANS CAPE'; 250。00; 'TUGGED ON IT')
1 row created。
你可以用一个简单的 SELECT 语句来验证插入的结果
INPUT/OUTPUT
SQL》SELECT * FROM COLLECTION
ITEM WORTH REMARKS
NBA ALL STAR CARDS 300 SOME STILL IN BIKE SPOKES
MALIBU BARBIE 150 TAN NEEDS WORK
STAR WARS GLASS 5。5 HANDLE CHIPPED
LOCK OF SPOUSES HAIR 1 HASN'T NOTICED BALD SPOT YET
SUPERMANS CAPE 250 TUGGED ON IT
分析
INSERT 语句并不需要列的名字 如果列的名字没有给出 SQL 会把数据添入对应的
列号中 也就是说 SQL 会把第一个值插入到第一列中 把第二个值插入到第二列中 依
此类推
例 8。2
下边的语句将会像例 8。1 中的表中插入数值
INPUT
SQL》INSERT INTO COLLECTION VALUES
2 ('STRING';1000。00;'SOME DAY IT WILL BE VALUABLE');
1 row created
分析
为了表明它与例 8。1 的效果是相同的 你可以用下边的例子来对其进行验证
INPUT
SQL》 SELECT * FROM COLLECTION;
OUTPUT
ITEM WORTH REMARKS
NBA ALL STAR CARDS 300 SOME STILL IN BIKE SPOKES
MALIBU BARBIE 150 TAN NEEDS WORK
160
…………………………………………………………Page 161……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
ITEM WORTH REMARKS
STAR WARS GLASS 5。5 HANDLE CHIPPED
LOCK OF SPOUSES HAIR 1 HASN'T NOTICED BALD SPOT YET
SUPERMANS CAPE 250 TUGGED ON IT
STRING 1000 SOME DAY IT WILL BE VALUABLE
插入空值
在第几天的 建立和操作表 中你将会学到如何使用 SQL 的 CREATE TABLE 语句来
创建一个表 现在你需要知道的是当一个列被创建以后 它可能一定的规则限制 其中之
一就是它应该 或不应该 包含空值的存在 空值的意思就是该处数值为空 但不是零 —
— 这属于整数范畴 或是空格 — — 这属于字符串范畴 而是说在空值处根本就没有数据存
在 如果列被定义为 NOT NULL 这时列中不允许有空值存在 则当你使用 INSERT 语
句时必须在此列插入一个数值 如果你违反了这个规则 那么你将收到一个错误的信息
警告 你可以在对应的空值列 规则上不允许为空值 插入空格 它不会被看为空值 而
且看起来该处并没有数据
INPUT
SQL》 insert into collection values
2 ('SPORES MILDEW FUNGUS'; 50。00; ' ');
OUTPUT
1 row inserted。
分析
在使用空格来代替空值以后 你可以在选择语句中使用空格
INPUT/OUTPUT
SQL》 select * from collection
2 where remarks = ' ';
ITEM WORTH REMARKS
SPORES MILDEW FUNGUS 50。00
分析
返回的结果就好像在那里有一个空值一样 只从输出上区别这里是空格还是空值是不
太可能的
161
…………………………………………………………Page 162……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
如果 REMARKS 列被定义为不允许空值 那么当输入下边的语句
INPUT/OUTPUT
SQL》 INSERT INTO COLLECTION
2 VALUES('SPORES MILDEW FUNGUS';50。00;NULL);
你将会得到一个错误信息
INSERT INTO COLLECTION
*
ERROR at line 1:
ORA…01400: mandatory (NOT NULL) column is missing or NULL during insert
注 请注意语法 数字和空值不需要引号 而字符型数据则需要引号
插入唯一值
在许多数据库管理系统中都允许你建立一个具有唯一值属性的列 这个属性的意思就
是在当前的表中当前列的内容不得出现重复 这个属性在当向一个已有的表中插入或更新
数据时可能会导致问题的产生 见下例
INPUT
SQL》 INSERT INTO COLLECTION VALUES('STRING'; 50; 'MORE STRING');
OUTPUT
INSERT INTO COLLECTION VALUES('STRING'; 50; 'MORE STRING')
*
ERROR at line 1:
ORA…00001: unique constraint (PERKINS。UNQ_COLLECTION_ITEM) violated
分析
在本例中你试图在 COLLECTION 表的 ITEM 列中插入另外一个叫 STRING 的项目
由于ITEM 列已经被定义为一个唯一的值 所以返回了一个错误结果 对于这个问题 ANSI
SQL 没有提供解决方法 但许多商业化的解释器会对此进行扩充 如下例
IF NOT EXISTS (SELECT * FROM COLLECTION WHERE NAME = 'STRING'
INSERT INTO COLLECTION VALUES('STRING'; 50; 'MORE STRING')
这一例子在 Sybase 系统中是支持的