第 7章 数据库基础
本章内容,
? SQL发展历史, 语言特点及分类
? 数据定义语言
? 数据操纵语言
随着 Internet与网络技术的不断普及,
B/S和 C/S结构的数据库应用程序已经成为数
据库应用的主流。而在这两种数据库应用程
序中,SQL语言已被广泛采用,因此掌握好
SQL语言对学好网络数据库至关重要。
7.1 SQL语言
7.1.1 SQL发展简史
20世纪 70年代初,E.F.Code首先提出关
系数据模型; 20世纪 70年代中期,IBM公司
在研制 SYSTEMR关系数据库管理系统中研制
了 SQL语言,最早的 SQL语言叫做 SEQUEL;
1979年 ORACLE公司推出了商用 SQL语言;
1986年 10月美国国家标准化协会 ( ANSI) 采
用 SQL作为关系数据库管理系统的标准语言,
后来 SQL被国际标准化组织 ( ISO) 采纳为国
际标准 。 1992年出现 SQL-92标准 。 现在最新
的 SQL版本是 SQL-99标准 。
目前市场上一些大型的关系数据库
系统虽然对 SQL的支持程度各有不同,但
是基本的 SQL功能都是支持的。使用 SQL
可以方便地完成对数据库的创建、修改、
删除等基本操作。因此,SQL语言是关系
数据库的核心语言。
7.1.2 SQL语言的特点及分类
SQL是英文( Structured Query
Language)的缩写,意思为结构化查询语言
,是用于对存放在计算机数据库中的数据进行
组织、管理和检索的一种工具;是一种特定类
型的数据库 —— 关系数据库。而控制这种数据
库的计算机程序就是我们常说的 DBMS—— 数据
库管理系统,譬如,Oracle,Sybase、
Microsoft SQL Server,Access,DB2等等。
当用户想要检索数据库中的数据时,
就通过 SQL语言发出请求,接着 DBMS对该
SQL请求进行处理并检索所要求的数据,最
后将其返回给用户,此过程被称作为数据
库查询,这也就是数据库查询语言这一名
称的由来。 SQL语言的主要功能就是同各种
数据库建立联系,进行沟通。按照 ANSI
(美国国家标准协会)的规定,SQL被作为
关系型数据库管理系统的标准语言,它是
操作关系数据库的重要的工具。
SQL并不是像 C,COBOL和 Fortran语言
那样的完整的计算机语言,它既没有用于
条 件测试的 IF语句,也没有用于程序分支
的 GoTo语句以及循环语句 For或 Do。确切地
讲,SQL是一种数据库子语言,SQL语句可
以被嵌入到另一种语言中,从而使其具有
数据库存取功能。 SQL也非严格的结构化语
言,它的句法更接近英语语句,因此易于
理解,大多数 SQL语句都是直述其意,读起
来就象自然语言一样明了。
对多数数据库应用开发来说,都需要
使用数据库来管理数据。例如,要创建一
个 VOD点播系统,就要用数据库存储各类
供会员点播的节目数据。创建动态网页同
样也需要使用数据库。
SQL语言具有以下特点,
( 1) 功能的一体化
( 2)高度的描述性
( 3) 操作方式的面向集合性
( 4) 两种使用方式语法结构的统一性
( 5) 语言的简洁, 易学性
SQL语言简洁、易用、易学。整个 SQL语
言只用了 9个动词就完成了数据控制、数据
操纵和数据定义的核心功能。这 9个动词是
CREATE,DROP,ALTER,SELECT,INSERT,
UPDATE,DELETE,GRANT及 REVOKE。
SQL功能强大,概括起来可分以下几种,
( 1) DDL( Data Definition Language,即
数据定义语言):用于定义数据的结构,比
如创建、修改或者删除数据库对象。
( 2) DML( Data Manipulation Language,
即数据操作语言):用于向数据库添加、修
改和删除数据,检索指定数据等操作。
( 3) DCL( Data Control Language,即数据
控制语言 ),用于定义数据库用户的权限 。
7.1.3 数据定义
数据定义语言是 SQL中定义数据库中数据
结构的语言, 它允许数据库管理员 ( DBA)
或用户创建, 删除或更改应用程序中所使用
到的各种数据库对象, 如表 ( tables), 视
图 ( views) 和索引 ( indexes) 等 。
1,数据库的建立与删除
数据库是包括了多个基本表的数据集 。
在 SQL 语 言 中, 可 以 利 用 CREATE
DATABASE和 DROP DATABASE语句完成
数据库的建立和删除 。
( 1) 创建数据库
使用 SQL的 CREATE DATABASE语句
可以创建所需的数据库。虽然可以在 MS
SQL Server的企业管理器中方便地创建数据
库,但有时需要在程序中临时使用一个数据
库时,就需要使用 SQL语句来临时创建。其
语法格式如下,
CREATE DATABASE 数据库名 [其它参数 ]
其中, 数据库名在系统中必须是唯一的,
不能重复 。, 其它参数, 随具体数据库系统
不同而异 。
例 7.1 建立 VOD点播系统数据库 ( vod)
CREATE DATABASE vod;
( 2) 删除数据库
当一个数据库不再使用时, 就可以使用
SQL的 DROP DATABASE语句删除以便释放
磁盘上所占用的空间 。 删除数据库时要
小心谨慎, 数据库一旦被删除则该库中的全
部数据, 包括数据库主文件, 用户数据文件
及事务日志文件将被全部删除, 一般无法轻
易地恢复被删除的数据 。 其语法格式如下,
DROP DATABASE 数据库名
该语句可一次删除多个数据库 。
例 7.2 删除 VOD点播系统数据库 vod
DROP DATABASE vod;
2,表的建立与删除
数据表是数据库的主要对象, 当建立
了一个数据库结构后, 就需要在数据库中
创建用于存放用户记录数据的数据表 。 在
关系型数据库中, 一个关系对应于一个表
Table。 在 SQL语言中, 可以利用 CREATE
TABLE和 DROP TABLE语句来完成对表的
建立和删除 。
( 1) 创建数据表
SQL语言中的 CREATE TABLE语句被
用来创建新的数据表 。 CREATE TABLE语
句的基本语法如下,
CREATE TABLE 表名
(列名 1 数据类型,
列名 2 数据类型,

列名 n 数据类型
)
其中, 列名是表中各个字段的名称, 最
好使用易于理解的名称, 且其中不能使用空
格 。 另外, 所有的字段都有相应的数据类型 。
SQL支持的数据类型有定长字符型, 整数,
小数和浮点数 。 不过, 各个厂家的数据库
产品在此基础上都进行了扩充, 各有差别 。
在使用时应该加以注意 。
例 7.3 建立一个 VOD点播系统会员缴费
表 consumption,由会员帐号 hy_id、预交费
用 yjfy、总消费金额 zfy、剩余金额 yfy、点
播节目次数 dbcs及会员等级 grade等六个字
段组成。其中会员帐号不能为空且取值唯
一。
CREATE TABLE consumption
(hy_id varchar(50) NOT NULL UNIQUE,/*
会员帐号取值唯一且非空 */
yjfy real,
zfy real,
yfy real,
dbcs int,
grade int
);
值得注意的是,在使用 CREATE
TABLE语句时,除了数据类型外,还可以
通过添加
一些辅助子命令,设置各个字段的一些特殊
属性,如定义自动增量字段( auto-
incremented field)、关键字、索引和特殊数
值限制。在表格定义时,这些参数将与数据
类型一同传递。
数据类型用来设定某一个具体列中数据
的类型。例如,在姓名列中只能采用 varchar
或 char的数据类型,而不能使用 number的数
据类型。
SQL语言中较为常用的数据类型有,
char(size):固定长度字符串,size用来设定
字符串的最大长度。 char类型的最大长度
为 255字节。
varchar(size):可变长度字符串,
最大长度由 size设定。
number(size):数字类型, 其中数字
的最大位数由 size设定 。
date:日期类型 。
number(size,d):数字类型, size决
定该数字总的最大位数, 而 d则用于设定
该数字在小数点后面的位数 。
简单来说,创建新表格时,在关键词
CREATE TABLE后面加入所要建立的表格
的名称,然后在括号内顺次设定各列的名称、
数据类型,以及可选的限制条件等。注意,
所有的 SQL语句在结尾处都要使用, ;”符号。
使用 SQL语句创建的数据库表格和表格中列
的名称必须以字母开头,后面可以使用字母、
数字或下划线,名称的长度不能超过 30个字
符。注意,用户在选择表格名称时不要使用
SQL语言中的保留关键词,如 SELECT,
CREATE,INSERT等作为表格或列的名称。
最后,在创建新表格时需要注意的一
点就是表格中列的限制条件。所谓限制条
件就是当向特定列输入数据时所必须遵守
的规则。例如,UNIQUE这一限制条件要
求某一列中不能存在两个值相同的记录,
所有记录的值都必须是唯一的。除
UNIQUE之外,较为常用的列的限制条件
还包括 NOT NULL和 PRIMARY KEY等。
当指定字段为 NOT NULL时,新增或修改
记录时,数据库系统不允许该字段为空。
表中若指定主键 PRIMARY KEY,则其数
据类型后面必须有 NOT NULL的声明,以
符合主键的规定。
( 2) 删除数据表
当数据表使用了一段时间后, 发现某个
表的字段必须增加以满足新的需要时, 必
须创建新表, 然后将旧表中的内容复制到
新表中, 并删除旧表, 以避免重复的数据
存储在数据库中 。 删除表的 DROP TABLE
语句的语法格式如下,
DROP TABLE 表名
例 7.4 删除上面建立的 VOD点播系统会
员缴费表 consumption。
DROP TABLE consumption;
DROP TABLE命令的作用与删除表格
中的所有记录不同。删除表格中的全部记
录之后,该表格仍然存在,而且表格中列
的信息不会改变 。而使用 DROP TABLE命
令则会将整个数据库表格的所有信息全部
删除。因此该命令使用时也要十分小心,
以免误删。
( 3) 建立表索引 CREATE INDEX
创建索引的主要目的是加速数据的处
理 。 在关系型数据库管理系统 ( RDBMS)
收到客户端的查询请求时, 数据库自动将
查询做速度最佳化处理 。 所谓最佳化处理
就是利用索引或其它可提高效率的方法完成
数据查询操作 。
在数据表中, 索引被用来快速找出一个
列上有一特定值的行 。 使用索引可迅速地查
到表中的数据, 而不必扫描整个表 。 其优点
为,
1) 可大大加快数据的查询速度, 同时使查
询得到优化, 提高系统性能 。
2) 通过创建唯一索引能保证表中该列数据
的唯一性 。
3)可以加快表与表间的连接。
因此, 应在重要的列上建立索引 。 但不
能在表中的每个列上都建立索引, 因为系统
在运行过程中, 在用户修改了其中的数据时,
都需要对建立的每一个索引进行维护, 而维
护是需要花费时间的 。 如此不仅不能加快查
询速度, 反而降低了系统的响应速度, 同时
占用了大量磁盘空间 。
因此在建立表时应该规划好在哪些列上
建立索引 。 一般应在以下列上建立索引,
1) 主键 。 主键一般都带索引 。
2) 在与其它表的连接中频繁使用的列 。
3)需要频繁地对该列进行查询或按顺序排
列的列。
建立表索引 CREATE INDEX的语法格式
如下,
CREATE INDEX 索引名 ON 表名 ( 列名 )
例 7.5 把会员缴费表 consumption按会员
帐号 hy_id字段建立索引
CREATE INDEX idindex ON consumption(hy_id);
( 4) 删除表索引
索引一经建立, 就由系统使用和维护
它 。 当数据增加和删除频繁时, 系统就会
花费很多时间来维护索引, 这时就要删除
一些不必要的索引 。
在 SQL语言中, 删除索引使用 DROP
INDEX语句, 其一般格式为,
DROP INDEX 索引名
例 7.6 删除表 consumption的 idindex索引 。
DROP INDEX idindex;
7.1.4 数据操作
SQL语言中提供了一系列的语句来控
制数据的操作, 提供读取及更新数据库的
功能 。 具体包括添加 ( INSERT), 修改
( UPDATE) 及删除 ( DELETE) 。
1,数据添加 INSERT
INSERT语句完成的功能是向表中添加
一条新的记录 。 其语法格式如下,
INSERT INTO 表名 (字段 1,字段 2,… 字段 m) values(值 1,值 2,… 值 m)
其中, 字段 1~字段 m是本条记录中要设
置的字段名 。 对于未进行设置的字段, 其值
将为空 。
下面的语句用来向表 consumption中添加
若干记录,
INSERT INTO consumption (hy_id,yjfy,zfy,yfy,dbcs,grade)
VALUES( '00099','50','10.5','39.5','24','1');
INSERT INTO consumption (hy_id,yjfy,zfy,yfy,dbcs,grade)
VALUES ('0002','80','38','44','65','2');
INSERT INTO consumption (hy_id,yjfy,zfy,yfy,dbcs,grade)
VALUES ('0003','15','4.5','10.5',,'3');
当向数据库表中添加新记录时, 在关键
词 INSERT INTO后面输入所要添加的表格名
称, 然后在括号中列出将要添加新值的列的
名称 。 最后, 在关键词 VALUES的后面按照
前面输入的列的顺序对应的输入所有要添加
的记录值 。
当插入的是整个行的数据时, 列名可以
省略 。 但 VALUES关键字后的数据必须与表
中字段顺序及数据类型完全一致 。 故上例还
可写作,
INSERT INTO consumption VALUES( '00099','50','10.5','39.5','24','1');
有时用户不希望将所有的列均插入一个
对应值, 而只要将数据插入到记录的若干列
中, 这时就要告诉 INSERT语句要插入哪些
字段的值 。 在这种情况下, 字段名的顺序可
以根据用户的需要任意排列, 但 VALUES后
值的个数, 数据类型必须与对应字段相匹配,
否则系统不是出现插入错误, 就是插入的数
据张冠李戴 。
2,数据修改 UPDATE
UPDATE语句用于实现对数据库中数
据的修改 。 其语法如下,
UPDATE 表名 SET 字段 1=值 1,字段 2=值
2,… 字段 m=值 m [WHERE限制条件 ]
其中,WHERE子句用来指明哪些记
录需要进行修改。如果没有 WHERE子句,
则表示修改表中的所有记录。
例如 7.7
( 1) 更新会员帐号为 0002的会员预交费
用 ( yjfy) 字段值为 100。
UPDATE consumption SET yjfy='100' where hy_id='0002';
( 2) 将所有会员的剩余金额费用 ( yfy) 字
段值加 0.5元 。
UPDATE consumption SET yfy=yfy+ 0.5 ;
3,数据删除 DELETE
要从数据表中删除一条记录, 可以使用
DELETE 语句 。 其语法格式如下,
DELETE FROM 表名 [WHERE 限制条件 ]
当需要删除某一行或某个记录时, 在
DELETE FROM关键词之后输入表格名称,
然后在 WHERE从句中设定删除记录的判断
条件 。 注意, 如果用户在使用 delete语句时
不设定 WHERE从句, 则表格中的所有记录
将全部被删除 。
例 7.8 删除表 consumption中会员帐号为
0003的学生记录 。
DELETE FROM consumption WHERE hy_id='0003' ;
SQL 是一种完备的数据处理语言,不仅
用于数据库查询,而且用于数据库中的数据
修改和更新,与支持 SQL查询的 Select语句
的复杂性相比较,更改数据库内容的 SQL语
句就格外简单。然而对于一个 DBMS来说,
数据更新所造成的风险大大超出了数据查询。
数据库管理系统必须在更改期内保护所存储
的数据的一致性,确保有效的数据进入数据
库,数据库必须保持一致性,DBMS还必须
协调多用户的并行更新,以确保用户和他们
的更改不至于影响其他用户的作业。
4,数据查询 SELECT
SQL是一种查询功能很强的语言,只
要是数据库存在的数据,总能通过适当的
方法将它从数据库中查找出来。 SQL中的
查询语句只有一个 ——SELECT。在众多
的 SQL命令中,SELECT语句应该算是使
用最频繁的。 SELECT语句主要被用来对
数据库进行查询并返回符合用户查询标准
的结果数据。它可与其他的语句配合完成
所有的查询功能。 SELECT语句的完整语
法,可以有 6个子句。完整语法如下,
SELECT 表的列名或列表达式集合
FROM 表集合
[WHERE 条件表达式 ]
[GROUP BY 列名集合 [HAVING组条件表达式 ]]
[ORDER BY 列名 [集合 ]… ]
整个语句的语义如下:从 FROM子句列出
的表中, 选择满足 WHERE 子句给出的条件
表达式的记录, 然后按 GROUP BY子句 ( 分
组子句 ) 中指定列的值分组, 再提取满足
HAVING子句中组条件表达式的那些组, 按
SELECT子句给出的列名或列表达式求值输出 。
ORDER子句 ( 排序子句 ) 是对输出的目标表
进行重新排序, 并可以附加说明 ASC( 升序 )
或 DESC( 降序 ) 排列 。
1) 检索单表中的所有数据
当查询没有限制条件时,不需要编写
WHERE子句,此时返回或显示表中的所有
数据。这是 SELECT语句最简单的情况。
例 7.9 列出表 consumption中所有记录,
SELECT * FROM consumption ;
在 SQL语言中, 字段名称处使用通配符
,*”, 表示取表中的所有字段 。
( 2) 检索单个表中指定列的数据
有时不需要从表中返回所有列中的数据,
只需要指定几个列的数据时, 就需要在
SELECT语句中明确地指定从哪些列中取得数
据 。
例 7.10 检索会员缴费表 consumption中会员
帐号, 总消费额和余费用三个字段的数据 。
SELECT hy_id,zfy,yfy FROM consumption ;
该语句执行时, 在服务器端将自动创建一个
只包含 hy_id,zfy和 yfy字段的临时表, 且字
段顺序为 SELECT后指定的字段顺序 。
( 3) 利用 WHERE条件从句进行选择查询
一个数据表中存放着大量相关的记录数
据。实际使用时,往往只需要其中满足要求
的部分记录。 select语句中的 where可选从句
用来规定哪些数据值或哪些行将被作为查询
结果返回或显示。下面是 WHERE的条件表
达式中所设的五种基本的查询条件,
? 比较运算 比较两个表达式的结果;
? 范围 判断数据的值是否位于某一范围内;
? 集合运算 判断表达式的值是否为集合的
成员;
? 字符串匹配 判断字符串是否与条件吻合;
? 组合查询 判断逻辑运算符连接的多个条
件查询;
? 空值 判断某一字段的值是否为空。
分述如下,
1) 基于比较的查询
SQL支持的比较运算符见表 7-1所示,
运算符
说明
运算符
说明
运算符
说明

等于
>
小于
<
小于
> =
大于等

< =
小于等

< >
不等于
在基于比较的查询条件中, 需要注意比
较运算符前后表达式的数据类型要一致, 否
则就必须使用数据类型转换函数将其中一种
数据类型转换为另一种数据类型;对要查询
的字符串常量须用单引号, '”括起来;为了
与 ANSI标准兼容, 不推荐使用双引号;对
于 DATATIME类型的时间常量, 也需用单引
号, '”括起来 。
例 7.11 用 下 面 的 语 句 可 以 列 出 表
consumption中剩余费用少于 1元的会员帐号 。
SELECT * FROM consumption WHERE yfy < 1 ;
2) 基于范围的查询
有时希望查找的是具有上下限范围的记
录, 这时就需要使用基于范围的查询 。
BETWEEN… AND… 和 NOT
BETWEEN… AND… 可以用来查找属性值在
( 或不在 ) 指定范围内的记录 。
例 7.12 列出表 consumption中点播次数用
多于 20并少于 60的会员帐号 。
SELECT * FROM consumption WHERE yjfy BETWEEN 20 AND 60;
3) 基于集合的查询
当希望查找的是指定值的若干记录时,
就需要使用基于集合的查询 。 IN可以用来
查找属性值属于指定集合的记录 。 设另有一
会员信息表 member,它由会员帐号 hy_id,
会员姓名 hy_name,登陆密码 passwd等字段
组成 。
例 7.13 查询剩余费用少于 1元的会员名单 。
SELECT hy_name FROM member WHERE hy_id IN
( SELECT hy_id
FROM consumption
WHERE yfy < 1);
4) 基于字符匹配的查询
除了上面所提到的运算符外,LIKE运
算符在 WHERE条件从句中也非常重要。
LIKE运算符的功能非常强大,通过 LIKE运
算符可以设定只返回属性列值与用户规定匹
配串相匹配的记录。匹配串可以是一个完整
的字符串,也可以含有通配符, %”和, _”。
其中,
%(百分号)代表任意长度(长度可为 0)
的字符串。
_ (下横线)代表任意单个字符。
5) 组合查询
逻辑运算符 AND和 OR可用来联结多个
查询条件 。 AND的优先级高于 OR,但用户
可以用括号改变优先级 。
例 7.15 查询 consumption表中预交费用多
于 100或消费金额多于 50的会员帐号 。
SELECT * FROM consumption WHERE yjfy > 100 OR zfy > 50;
6) NULL的检索
有时希望知道表中的某一字段中到底有
几个记录是 NULL,即没有输入过任何值。
通常字段未赋予初值时,其值为 NULL。
不要把 NULL等同于 0,NULL表示一种不
能确定的数据,不能将具有 NULL值的列
参加算术运算。
例 7.16 查询 consumption表中还没有交
预付费用的会员帐号
SELECT * FROM consumption WHERE yjfy IS NULL;
( 4) 使用集函数
在使用 SQL语言进行数据库查询操
作时,
可以通过对数值的判断设定灵活的查询条件。
同时,为了增强对运算的支持能力,SQL也
提供了众多实用的运算函数。主要有,
SUM() 计算一列值的总和 (此列必须是数值
型 )
AVG() 计算一列值的平均值 (此列必须是数
值型 )
MAX() 求一列值的最大值
MIN() 求一列值的最小值
COUNT() 统计指定字段所包含的记录数目
如果指定了 DISTINCT短语, 则表示在
计算时要取消指定列中的重复值 。 如果不指
定 DISTINCT短语或指定 ALL短语 ( ALL为
默认值 ), 则表示不取消重复值 。
例 7.17 查询 consumption数据表中会员总
人数
SELECT COUNT(*) FROM consumption;
例 7.18 查询 consumption数据表中会员平
均消费额
SELECT AVG(zfy) FROM consumption;
( 5) 分组查询
GROUP BY子句将查询结果表按某一列
或多列值分组, 值相等的为一组 。 对查询
结果分组的目的是为了细化集函数的作用对
象 。 如果未对查询结果分组, 集函数将作用
于整个查询结果 。 分组后集函数将作用于每
一个组, 即每一组都有一个函数值 。
例 7.19 按会员等级查询 consumption数据
表中不同等级会员平均消费额
SELECT AVG(zfy) FROM consumption GROUP BY grade;
如果分组后还要求按一定的条件对这
些组进行筛选, 最终只输出指定条件的组,
则可以使用 HAVING 短语指定筛选条件 。
WHERE子句与 HAVING短语的区别在
于作用对象不同 。 WHERE子句作用于基
本表或视图, 从中选择满足条件的记录 。
HAVING短语作用于组, 从中选择满足条
件的组 。
( 6) 对查询结果进行排序
在 SELECT语句中, 使用 ORDER BY语
句可以进行结果的排序 。 排序时默认按升序
( ASC) 排列, 也可以用关键字 DESC指定
按降序排列 。
例 7.20 把所有会员消费额按从高到低顺
序进行排序
SELECT * FROM consumption ORDER BY zfy DESC;
对于空值, 若按升序排列空值记录将最
后显示 。 若按降序排列, 空值记录将最先显
示 。
7.2 SQL Server 2000
上一节简要介绍了有关数据库的基本知识和基本
概念 。 本节介绍 SQL Server 2000的应用开发 。
7.2.1 SQL Server简介
SQL Server 2000是目前比较流行的数据库管理系
统,是基于结构化查询语言( SQL)的可伸缩的关系
型数据库,是微软 SQL Server系列产品的最新版本。
该系统是在 SQL SERVER 7.0的基础上对性能、可靠
性以及易用性等方面进行了扩展,具有强大功能的
GUI(图形用户界面),是实现电子商务、数据仓库
和在线商务解决方案的卓越的数据库平台。
7.2.2 系统配置
SQL SERVER 2000有多个版本, 包括
Enterprise Edition ( 企业版 ), Standard
Edition( 标准版 ), Personal Edition( 个人
版 ), Developer Edition( 开发人员版 ),
Connectivity( 客户端连接组件 ) 以及 Client
Tools( 客户端组件 ) 。 不同的版本有不同
的软硬件要求,见书中表 7-2说明为使用
Microsoft SQL Server 2000 各种版本或组件
而必须安装的操作系统 。
SQL Server 2000 的 某 些 功 能 要 求 在
Microsoft Windows 2000 Server以上的版本才
能运行 。 因此大家安装 Windows Server 2000
( 建议为 Advanced版本 ), 可以学习和使用
到 SQL Server 2000的更多功能, 以及享受更
好的性能 。
Microsoft SQL Server 2000对计算机的硬件
配置有所要求, 并不是所有的计算机都可以
运行该系统 。 除了前面讲述的软件配置外,
还要求计算机具有下列硬件配置 。 当然, 系
统配置越高, 运行系统的速度就越快 。
首先是 CPU的要求 。 SQL Server 2000要
求 Intel以及兼容的处理器, 处理器版本为
Pentium 166以上 。 当然处理器的配置还要
满足操作系统的需要 。 其次是对内存的要
求, 具体版本的要如书中表 7-3所示 。
SQL Server 2000 根据安装时选择的组件
需要不同的硬盘存储空间 。 具体组件要求
如书中表 7-4所示 。
在监视器方面, SQL Server 2000需要
VGA模式的显卡支持, 具有 800× 600象素
分辨率 。
7.2.3 安装与卸载 SQL Server 2000
了解了 SQL Server 2000对系统的软硬件
要求后, 下面来介绍 SQL Server 2000的安
装过程 。
1,安装 SQL Server 2000
同 Microsoft其它软件一样, SQL Server
2000也提供了 GUI安装界面, 用户只需按
照安装提示进行相应选择, 关键是了解安
装过程中出现的界面参数的意义 。 将企业
版安装光盘插入光驱后, 按提示框提示顺
序, 选择, 安装 SQL Server 2000
组件”,后选择,安装数据库” 启动安
装程序向导,弹出如图 7-1所示的窗体。
图 7-1
选择, 下一步,, 出现图 7-2所示界面 。
图 7-2所示界面显示为即将安装的数据库服
务器名称及选择安装类别, 有以下的几种安
装方式,
( 1) Local Computer(选择本地安装):如
果选择该项,系统将使用 Windows NT默认
的服务器。
( 2) Remote Computer( 远程安装 ),将
SQL Server 2000安装到远程计算机上, 如果
选择该项, 要求输入虚拟服务器的名称 。
图 7-2
( 3) Virtual Server( 虚拟服务器 ),建立
一个虚拟的 SQL服务器 。
然后选择, 本地计算机, 进行安装。
在图 7-3中的, 安装选择, 窗口,选择, 创
建新的 SQL Server实例,..”。对于初次安装的
用户,应选用这一安装模式,不需要使用
,高级选项, 进行安装。, 高级选项, 中的
内容均可在安装完成后进行调整。
图 7-3
在图 7-4中的, 用户信息, 窗口,输
入用户信息,并接受图 7-5所示软件许可
证协议。
图 7-4
图 7-5
在, 安装定义, 窗口图 7-6,需要定义安装类型,
安装类型是根据具体应用而选择的 。 有以下几种类
型供选择,
( 1) 仅客户端工具 。 适用与客户端已经同服务器
连接, 需要在客户机上运行组件 。
( 2) 服务器客户端工具 。 该选项允许安装客户端
和服务器组件, 如果想建立管理员权限, 选择该项 。
( 3) 仅连接 。 只是建立一个连接, 没有安装其它
组件 。
这里选择, 服务器和客户端工具, 选项进行安
装 。
图 7-6
在, 实例名, 窗口图 7-7,需要为重新安装
的服务器实例命名, 如果选择, 默认, 选项,
代表安装的服务器和 Windows NT服务器名称相
同 。 SQL Server 2000可以在同一台服务器上安
装多个实例, 也就是说可以重复安装几次 。 这
时就需要选择不同的实例名称了 。 实例名会出
现在各种 SQL Server 和系统工具的用户界面中,
因此, 名称越短越容易读取 。 另外, 实例名称
不能是, Default”或, MSSQLServer” 以及 SQL
Server的保留关键字等 。 命名完成后单击下一步 。
图 7-7
在, 安装类型, 窗口 ( 图 7-8), 需要确
定安装方式, 以及将数据库安装到计算机的
什么位置 。 可根据计算机的具体配置进行选
择安装 。 安装方式有以下 3种,
( 1) 典型安装:对于大多数用户来说, 推
荐用这种安装方式, 它包含了绝大部分组件 。
( 2)最小安装:只安装必须的组件,如
果用户的计算机存储空间不够,可以选择这
种安装方式,但采用这种方式有许多功能不
能实现。
( 3) 自定义安装:对于高级用户来说,
用户可以选择需要的组件进行安装 。
在, 目的文件夹, 框,用户可以单
击, 浏览, 按钮选择数据库管理系统文件
(程序文件和数据文件)存放的位置。程
序文件是系统运行必须的文件。数据文件
是专门存储数据的文件夹。在选择文件位
置的时候,应该注意数据库的数据容量以
及增长的速度等情况。选择文件位置后,
系统会自动显示需要空间以及该文件夹的
剩余空间。
图中选择, 典型, 安装选项。
图 7-8
在, 服务账号, 窗口 ( 图 7-9), 请选
择, 对每个服务使用统一账户,..”的选项 。
在, 服务设置, 处, 选择, 使用本地系统
账户,, 即 SQL Server 服务帐号同 NT服务
器帐号相同 。 如果需要, 使用域用户账户,
的话, 需要将该用户添加至 Windows Server
的本机管理员组中并输入用户名称, 登陆
密码以及登陆的域 。
图 7-9
在, 身份验证模式, 窗口 ( 图 7-10),
SQL Server 2000有两种认证模式,
( 1) Windows身份验证模式。选择该认证
模式表示对于成功登录 Windows NT操作系
统的用户,就可以访问数据库服务器,这些
用户的安全级别是得到认证的。
( 2)混合模式。表示除了 Windows NT系统
认证外,还要 SQL Server 2000服务器认证,
这时,需要输入两次密码。
这里选择 "混合模式,.." 选项,并设置
管理员, sa”账号的密码,单击, 下一步, 。
图 7-10
在, 开始复制文件, 窗口,提示已
经对安装选项进行了设置,单击, 下一
步, 按钮。
图 7-11
在, 选择许可模式, 窗口,根据购买
的类型和数量输入( 0表示没有数量限
制)。, 每客户, 表示同一时间最多允许
的连接数,,处理器许可证, 表示该服务
器最多能安装多少个 CPU。选择, 继续安
装, 。
系统开始安装组件和复制文件。如果
安装成功,系统会出现提示安装成功的界
面,选择“完成”按钮,结束安装过程。
图 7-12
图 7-13
2,卸载 SQL Server 2000
卸载 SQL Server 2000在控制面板中的
,添加 /删除程序, 组中进行 。
7.2.4 SQL Server的启动, 暂停和停止操

1,启动 SQL Server 2000
启动 SQL Server 2000 的 方 法 SQL
Server2000的方法有以下 6种,
( 1)自动启动 SQL Server 2000。在控制面
板中,双击打开, 管理工具,,再双击, 管
理工具, 中的, 服务, 程序组,,服务, 页
面中右键单击, MSSQL SERVER”服务,如
图 7-14所示。选中, 属性,,, 弹出
MSSQL SERVER的属性, 对话框,如图 7-
15所示。在, 启动类型, 下拉列表中,选中
,自动,,则在以后每次打开计算机时自动
启动 SQL Server 2000服务。
( 2) 用, 服务, 程序启动 。 如图 7-14所示,
选择, 启动,, 则启动 SQL Server 2000。
( 3) 用任务栏中的图标启动 。 如图 7-16所
示, 选择, 打开 SQL Server服务管理器, 即
可启动 。
( 4)通过服务管理器启动。打开 SQL
Server 服务管理器的方法很多,鼠标左键双
击菜单栏内 SQL Server 图标,或者用鼠标右
键单击该图标,在弹出图 7-16所示的窗体中
可以打开。 SQL Server 2000的服务管理器如
图 7-17所示,点击, 开始 /继续, 按钮就可启
动。
图 7-14 SQL Server属性
( 5)用 SQL企业管理器启动。在程序组中,
选择, 企业管理器, 则可打开企业管理器,
如图 7-18所示。选择, 连接, 即可启动 SQL
Server 2000。
图 7-15 MSSQL SERVER属性
6) 用命令启动 。 在 DOS命令提示符下输入:
net start sqlserver

sqlserver.exe
均可启动 SQL Server 2000。
图 7-16 用任务栏图
标启动
图 7-17 SQL Server 2000
的服务管理器
图 7-18 企业管理器
2,停止 SQL Server 2000的运行
当不需要使用或者需要重新启动 SQL
Server 2000时, 则需要停止 SQL Server
2000 的运行 。 一般, 在停止运行 SQL
Server 2000前, 首先要以广播的形式通知
在线用户, 让这些用户尽快地完成手头
作业, 以免造成不良后果 。 通知在线用
户的命令格式如下,
net send/users,广播的内容,
例如,
net send/users "通知 ! 10分钟后服务器将被关闭 !
"
待在线用户接收到通知 10分钟后, 服务器可
停止 SQL Server 2000的运行 。
停止 SQL Server 2000的方法也有多种。一般
情况下,凡是能够启动 SQL Server 2000的操作中,
均有停止 SQL Server 2000的选项。即可以通过控
制面板中的, 服务器, 程序组、任务栏中的 SQL
Server 2000图标,SQL Server 2000的服务管理器
和企业管理器来停止运行 SQL Server 2000。
另外,通过命令也可以停止 SQL Server 2000
的运行,如图 7-19所示。
图 7-19用命令停止运行 SQL Server 2000
命令为,
net stop mssqlserver
说明在命令提示执行命令启动 SQL Server 2000
后, 可以用 Ctrl+C组合键停止它的运行 。
3,暂停 SQL Server 2000的运行
如果保证在线用户能正常访问, 而不会有新
的用户增加, 则可以 SQL Server 2000进行暂停运
行 。 暂停运行后, 在线用户仍能正常访问数据库 。
暂停运行的方法类似停止运行的方法, 只要
在相应的窗体中选中, 暂停, 即可 。 暂停后, 不
需重启动 SQL Server 2000,选择, 继续运行, 即
可, 如图 7-20和 7-21所示 。
另外,也可以用命令暂停 SQL Server
2000的运行。
语法为,
net pause mssqlserver
暂停后若要继续运行, 也可用命令进
行操作 。
语法为,
net continue mssqlserver
图 7-20 暂停运行 SQL
Server 2000
图 7-21继续 运行 SQL
Server 2000
7.2.5 SQL SERVER 2000基础
在学习过如何使用 SQL语句创建数据
库及数据表后, 接下来就以创建 VOD 数据
库为例来简单介绍 SQL Server 2000的基本
操作 。 在 SQL Server 2000中, 可以利用企
业管理器的图形工具完成数据库的创建 。
1,数据库的创建
使用菜单中的, 程序 → Microsoft SQL
Server→ 企 业管理 器, 命令, 进入 SQL
Server 的数据库管理控制台 。
图 7-22 创建数据库
图 7-23 数据库的属性
图 7-24 在, 数据文件, 选项卡中输入数据库文件的物理

图 7-25 设置“日志文件”
( 1) 单击展开左侧服务器, 展开数据库选项 。 右
键单击, 数据库,, 在弹出的菜单中选择, 新建
数据库,, 如图 7-22所示 。
( 2) 在数据库建立对话框中, 在, 常规, 选项卡
中输入数据库的名称 ( 逻辑名 ), 如图 7-23所示 。
( 3)在, 数据文件, 选项卡中输入数据库文件
的物理名,包含位置、初始大小、文件组及文件
的有关属性,如图 7-24所示。
( 4)同样,在“事物日志”选项卡中,填写有
关内容,如图 7-25所示。
( 5) 设置完成后, 单击, 确定, 按钮, 数据库
VOD 就创建好了,但这个数据库是空的, 还需要在
其中建立一系列的数据表 。
2,建立数据表
在企业管理器中创建数据表, 以表
consumption为例, 按如下步骤进行,
( 1) 在企业管理器中, 展开选定的数据库 。
在表节点上单击鼠标右键, 并选择, 新建,
子菜单, 选择, 表, 命令 。
( 2)在新弹出的表设计器中设置各项列
属性。如图 7-26所示。
图 7-26 设置表中各列属性
( 3) 保存表格, 单击工具栏上的, 保存, 按钮,
弹出如图 7-27所示的对话框, 要求用户保存表格 。
图 7-27 保存表格
这样,一个基本表的建立就完成了。
3,查询分析器 Query Analyzer
SQL Server中提供了多种图形和命令行
工具, 用户可以使用不同的方法来访问数
据库 。 这些工具的核心是调用 Transact -
SQL语言 。 SQL查询分析器就是其中的一个
支持图形用户界面的 SQL分析工具, 用以
交互式地设计和测试 Transact -SQL语句,
批处理和脚本 。
在 SQL查询分析器中, 用户既可在查
询窗口直接输入 Transact -SQL语句, 也可
从包含 Transact -SQL语句的文件中调入
Transact -SQL语句, 执行语句并在结果窗
口中查看到执行的结果 。
通过 SQL查询分析器, 可用 Transact -
SQL语句从数据库中查询, 添加, 修改或
删除数据, 也可以直接创建数据库和数据
表等 。
要进入 SQL查询分析器,选择, 开
始, →, 程序, →, Microsoft SQL Server
7.0”→,查询分析器,,系统出现, 连接
SQL Server”对话框,在该对话框的, SQL
Server”输入框中选择一个要连接到的 SQL
Server服务器名后,单击, 确定, 按钮,
出现如图 7-28所示窗口。
图 7-28 查询分析器窗口中运行命令
在 SQL查询分析器窗口中的, DB”下
拉式数据库组合框中选中一个要操作的数
据库 。
在 SQL命令输入窗口中用户根据需要
输入 SQL命令后,单击, 执行, 按钮,系
统将自动产生一个结果窗口,在该窗口中
显示命令的执行结果。
4,存储过程
存储过程为一段已编译的 SQL程序,
它将命令行、常用或复杂的数据库操作命
令预先建成若干个由 SQL指令组成的程序
文件。和普通的 SQL程序相比,存储过程的
速度较快,可靠性高,在后面章节中还要详
细介绍。 SQLServer支持存储过程。存储过
程存储在数据库内,可由应用程序调用执行,
在存储过程中允许用户使用变量、有条件执
行及其他强大的编程功能,可以大大简化对
数据库的操作。
在 SQL Server中, 存储过程由 Transact -
SQL的 CREATE PROCEDURE语句创建 。 存
储过程的标准写法,
Create Procedure Procedure _Name
Define Parameter
As
SQL Structure
上面的语法结构中, Procedure _Name
为存储过程名, 也是将在 Command中引用
的名字 。 然后是定义输入和输出参数 。 最后
是一个 SQL结构化语句 。
下面的例子从 member表中检索出指定会
员信息 。
CREATE PROC selecthy
@para_id varchar(16)
as
select * from member Where hy_id=@para_id
例中 para_id为输入参数。存储过程的
创建既可以使用向导来完成,也可以在企
业管理器中完成,或在 Query Analyzer中创
建和测试。
( 1) 使用企业管理器来完成创建存储过

在企业管理器中, 展开 SQL Server服务
器节点, Databases节点和要创建存储过程
的数据库, 这里为 vod点播系统 。 右击
,存储过程,, 如图 7-29选择, 新建存储
过程, 就进入存储过程的设计窗体, 如图
7-30所示 。
在该窗体中, 可以设计, 保存, 并运行
存储过程 。 在文本框中显示了 CREATE
PROCEDURE 语句的框架 。 在此修改存储
过程的名称, 参数以及对应的 SQL语句 。
然后单击, 检查语法, 按钮, 检查存储过
程中语法的合法性 。 最后单击, 确定,,
完成存储过程的创建 。
( 2) 在查询分析器中创建和测试存储过程
在查询分析器中创建存储过程很简单, 只需
在进入查询分析器后, 输入存储过程代码即可,
如图 7-31所示, 单击工具栏上的执行 ( 或按 F5键 )
按钮执行此代码, 就创建了名为 selecthy的存储
过程 。
selecthy 的 存 储 过 程 中 使 用 了 输 入 参 数
para_id。 要测试该存储过程请在查询分析器中输
入如下指令 ( 假设查询指定会员为, 0001”),
EXEC selecthy "0001"
单击工具栏上的执行 ( 或按 F5键 ) 按钮执行
此代码, 在下面的结果框中显示执行结果, 如图
7-32所示 。
图 7-29 自定义存储过程
图 7-30 存储过程设计窗口
图 7-31 在查询分析器中创建存储过程
图 7-32 selecthy 存储过程的调用与执行结果
本 章 小 结
进行 Web开发时, 数据库是一个很重要的环
节 。 本章内容分两大部分,
第一部分介绍了 SQL语言的发展历史及其特
点 。 由于介绍的是标准的 SQL语言, 绝大部分例
子也应能在 Oracle,Sybase,DB2,Informix及
SQL Server等系统上应用 。 并且从数据定义语言
( DDL), 数据操纵语言 ( DML) 两方面详细
介绍了如何使用 SQL命令建立和删除数据库, 数
据表及索引, 如何使用 SELECT语句从表中取得
所需的数据和修改已存在数据的各种方法和实例 。
第二部分介绍了安装 SQL Server 2000企业版
的软硬件配置要求, 安装过程的详细步骤, 以及
需要注意的事项 。 当不需要使用或需重新启
动 SQL Server 2000时, 就必须停止 SQL Server
2000的运行 。 一般地, 启动 SQL Server 2000的几
种方法中都有相应的停止运行的操作 。 只是在停
止前, 一般先要以广播的形式通知在线用户, 以
免造成不良后果 。 如要保证在线用户仍可正常访
问, 则对 SQL Server 2000实行暂停即可 。 暂停的
方法同停止的方法, 不同的是在相应的窗体中选
中, 暂停, 。
本章应重点掌握如何利用 SQL Server 2000实现
网站数据库的基本方法, 包括创建数据库数据表
以及存储过程等, 这些操作都可以在 SQL Server
2000的企业管理器中完成 。
习 题
1, 使用 SQL 命令在 vod 库中创建会员信息表
member,由会员帐号 hy_id,会员姓名 hy_name、
登陆密码 passwd,联系电话 telephone,电子邮件
email及注册日期 register字段组成 。
2,向会员信息表 member中插入 3条会员信息 。
3,更新表 consumption中会员等级, 消费金额在前
20名的为超级会员 ( 即会员等级为 1), 并检索这
些会员信息 。
4,检索总消费金额多于 50或点播节目次数多于 60
的会员帐号 。
5,更新消费总额大于 80的会员余费用字段值加其
消费金额的 5%。
6,简述 SQL Server 2000企业版, 标准版及个人版
的系统配置要求 。
7,安装 SQL Server 2000企业版有哪两种认证模式?
这两种模式有什么区别?
8,启动 SQL Server 2000有哪几种方法? 具体如何
操作?
参 考 答 案
1,使用命令,
CREATE TABLE member2
(hy_id varchar NOT NULL UNIQUE,/* 会员帐号
取值唯一且非空 */
hy_name varchar,
passwd varchar,
email varchar,
regdate datetime );
2,使用命令,
INSERT INTO member VALUES
('0001','Marry','marry','89004560','marry@sohu.com',
'2002-05-07');
可参照插入记录即可 。
3,使用命令,
UPDATE consumption SET grade=1 WHERE hy_id
IN
(SELECT TOP 2 hy_id FROM consumption
ORDER BY zfy DESC );
SELECT * FROM member WHERE hy_id IN
(SELECT hy_id FROM consumption WHERE
grade=1);
4,使用命令,
SELECT hy_id FROM consumption WHERE zfy
>50 OR dbcs >60;
5,使用命令,
UPDATE consumption SET yfy=yfy+zfy*0.05
WHERE zfy>80;
6,略 。
7,Windows身份验证模式:选择该认证模式表示
对于成功登录 Windows NT操作系统的用户, 就可
以访问数据库服务器, 这些用户的安全级别是得
到认证的 。
混合模式:表示除了 Windows NT系统认证外, 还
要 SQL Server 2000服务器认证, 这时, 需要输入两
次密码 。
8,略 。
实 训 一
利 用 数 据 定 义 语 言 的 CREATE
DATEBASE和 CREATE TABLE创建数据库
及数据库表并利用数据操纵语言的 INSERT
语 目的和要求
( 1) 熟练掌握利用数据定义语言创建数据
库及表操作 。
( 2) 利用 SELECT语句对数据库表进行查
询以返回符合会员查询要求的结果数据集 。
实训内容
参考第 13章的表结构 13.8和 13.9,在数据
库 VOD中建立一个节目信息表 Playbill和
一个会员点播历史记录表 Order_log。 并
插入几条新记录 。 在查询分析器中完成
以下内容的检索,
( 1) 返回表 Playbill中最新加入的 10个节
目名称 。
( 2) 返回表 Playbill中点播率最高节目编
号 。
( 3) 统计表 Playbill中 lb1=1并且 lb2=2的
节目总数 。
( 4) 统计表 Order-log中点播次数多于 25的
会员帐号 。 句添加记录, SELECT语句检索
记录 。
参考答案
使用命令,
SELECT TOP 3 jmbh,jmmc FROM Playbill
ORDER BY jmbh DESC ;
SELECT MAX(dbcs) FROM Playbill;
SELECT COUNT(*) FROM Playbill
WHERE lb1=1 AND lb2=2;
SELECT hy_id FROM Order_log GROUP
BY hy_id HAVING COUNT(dbcs)>25;
实 训 二
SQL Server 2000企业版安装过程及在企业管
理器中创建所需数据库及数据表 。
目的和要求
( 1) 熟练安装企业版 SQL Server 2000。
( 2) 熟悉在企业管理器中创建所需数据库
及数据表过程 。
( 3)掌握在查询分析器中输入和执行代码,
分析得到的对应结果。
实训内容
( 1) 安装 SQL Server 2000企业版 。 并在企
业管理器中创建本章所建数据库 VOD及根
据第 13章表结构创建数据表 。
( 2) 创建一个存储过程, 要求输入会员帐
号, 返回表 order_log中该会员所点播记录总
数 。
参考答案
( 假设输入会员帐号为 0001)
创建存储过程,
CREATE PROCEDURE sp_count
@para_hyid varchar(30),
@para_reccounts int OUTPUT
AS
SELECT @para_reccounts=COUNT(*) FROM order_log WHERE
hy_id=@para_hyid
GO
测试存储过程,
declare @para_reccounts int
exec sp_count "0001",@para_reccounts