按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
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 系统中是支持的
162
…………………………………………………………Page 163……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
一个正当的 标准化的表中应该有一个唯一值列或关键字列 这一字段在归并表格的
时候非常有用 如果你使用索引的话它也可以大副度地提高你查询的速度 见第 10 天 创
建视图和索引
注 下边的这个插入语句将会向表中插入一个新的雇员
SQL》 insert into employee_tbl values
('300500177'; 'SMITHH'; 'JOHN')
在按下回车键以后 你发现你把 SMITH 拼错了 别担心 你可以使用 ROLLBACK 命
令来回溯操作 而数据则并不会被插入 关于 ROLLBACK 语句的详细使用方法请参见第
11 天的 事务处理控制
INSERT SELECT 语句
INSERT VALUE 语句在向表中插入几个数据的时候非常有用 但显然这是不够的 如
果你想向表中插入 25;000 行数据时怎么办 在这种情况下 INSERT SELECT 语句就非常有
效 它允许程序员拷贝一个或一组表的信息到另外一个表中 你可以在下边这几种情况下
使用该语句 需要查询的表经常产生利润的增加 需要查询的表可以从多个数据库或表中
获得外部数据 由于多个表的查询要比单一表的查询速度慢得多 因此对单个表的查询速
度要远远高于复杂而缓慢的多个表查询 在服务器/客户机系统上需要查询的表的数据经常
存储在客户机上以减少网络中的数据传输速度
见下例
INPUT
SQL》 insert into tmp_tbl
2 select * from table;
OUTPUT
19;999 rows inserted。
分析
你可以将所有的数据都插入到一个临时表中
注 并不是所有的数据库管理系统都支持临时表 请检查你的数据库系统的文档 看看它
是否支持临时表 在第 14 天中你将会知道对于它的更详细的内容
INSERT SELECT 语句的语法格式如下