1.SQL 的数据定义功能
SQL 的数据定义功能提供数据定义语言(Data Definition Language,DDL),用户通过它可以定义数据库中的数据对象,包括定义基本表、定义视图和定义索引。
数据定义功能的 SQL 语句
(1)定义基本表语句:
CREATE TABLE < 表 名 >
(2)修改基本表语句:
ALTER TABLE <表名>
ADD <列名> <数据类型>
ALTER COLUMN <列名><数据类型>
DROP COLUMN <列名>
其中,ADD用于增加新的列、ALTER COLUMN 对原有列的定义进行修改、DROP COLUMN 用于删除列的定义。
(3)删除基本表语句:
DROP TABLE <表名>
(4)定义视图语句:
CREATE INDEX < 视 图 名 >
(5)删除视图语句:
DROP INDEX < 视 图 名 >
(6)定义索引语句:
CREATE INDEX < 索 引 名 >
(7)删除索引语句:
DROP INDEX < 索 引 名 >
2.SQL Server 2005 支持的数据类型
表是存放数据库数据的对象,表中的数据组织成行、列的形式,每一行代表一个记录,每 一列代表记录的一个属性。
设计数据库时,要决定它包括哪些表,每个表中包含哪些列以及每列的数据类型等。在表中创建列时,必须为其指定数据类型,列的数据类型决定了数据的取值、范围和存储格式。 SQL Server 2005 提供了丰富的系统数据类型,如表1-1 所示。
表1-1 系统数据类型表
数据类型 | 符号标识 |
整数类型
位数据类型 | Bigint、int、Smallint、Tinyint
Bit |
3. 列级完整性约束
创建表的实质就是定义表结构及约束等属性。在使用 SQL Server 管理平台和 SQL 语 句创建表之前,先要设计表,即确定表的名字、所包含的列名、列的数据类型、长度、是否可为 空值、默认值情况、哪些列是主键等。
用于定义列一级的完整性约束, 一般包括:
(1)PRIMARY KEY——主关键字约束。当某一(组)列被设置为主关键字,该一(组) 列的取值不能为空或有重复值出现。
(2)UNIQUE ——唯一性约束。当某一(组)列被设置了唯一性约束,该一(组)列的取 值不能有重复值出现。可以取空值,但最多只能有一个数据为空。
(3)CHECK ——检查约束。当某一列被设置了检查约束,该列的取值必须符合检查约束所设置的条件。
(4)DEFAULT——默认值约束。当某一列被设置了默认值约束,该列的取值可以输入,也可以不输入,不输入值时,系统自动为其添充默认值。
(5)NOT NULL——空值通常表示未知、不可用或将在以后添加的数据。若一个列允许为空值,则向表中输入记录值时可不为该列给出具体值,而一个列若不允许为空值,则在 输入时必须给出具体值。表的关键字不允许为空值。
4. 使用 SQL 语句创建表
建立表的 SQL 命令是CREATE TABLE,一般格式是:
CREATE TABLE < 表 名 > (
<列名><数据类型>[<列级完整性约束>],
<列名><数据类型>[<列级完整性约束>],
...
[<表级完整性约束>])
说明:
·<表名>:所要定义的基本表的名字。
·<列名>:组成该表的各个属性(列)。
·<数据类型>:请参见“实验知识要点2”部分的内容。
·<列级完整性约束>:请参见“实验知识要点3”部分的内容。
5. 索引的概念及创建索引的优点
索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。索引是针对一个表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都含有逻辑指针,以便加速检索物理数据。
6. 索引的分类
SQL Server 2005 支持在表中任何列上定义索引。索引可以是唯一的,即索引列不会有两行记录相同,这样的索引称为唯一索引。对某个列建立唯一索引后,插入新记录时 DBMS 会自动检查新记录在该列上是否输入了重复值,这相当于增加了一个 UNIQUE 约束。索引也可以是不唯一的。
按索引的组织方式的不同,可以将索引分为两种:聚簇索引和非聚簇索引。创建索引时的默认设置是非聚簇索引。
(1)聚簇索引指建立聚簇索引后,基本表中数据也需要按指定的聚簇属性值的升序或 降序存放,即聚簇索引的索引项顺序与表中记录的物理顺序一致。在 CREATE TABLE命 令中的 PRIMARY KEY 约束将隐式创建聚簇索引, 一个表只允许建立一个聚簇索引,聚簇索引更适用于很少对基表进行增删改操作的情况。
(2)非聚簇索引指建立索引后,基本表中数据和非聚簇索引的索引项顺序不相同。非聚簇索引包含非聚簇索引键值,并且每个键值项都有指向包含该键值的数据行的指针。
7. 使用 SQL 语句创建索引
建立索引的 SQL 命令是 CREATE INDEX,一般格式是:
CREATE [ UNIQUE ][CLUSTERED| NONCLUSTERED ] INDEX <索引名>
ON<表名>(<列名> [ ASC | DESC ][,<列名> [ ASC | DESC ]…])
说明:
·UNIQUE: 唯一索引。
·CLUSTERED: 聚簇索引。
·NONCLUSTERED: 非聚簇索引。
·ASC: 索引升序排序。
· DESC: 索引降序排序。
8. 创建索引的优、缺点
索引是数据库常用的对象之一,使用索引可以大大提高数据库的检索效率,加速表与表之间的连接,减少分组与排序的时间。
8.1创建索引的优点
(1)加速数据检索。
(2)加快表与表之间的连接。
(3)在使用 ORDER BY 和 GROUP BY等子句进行数据检索的时候,可以减少分组和排序的时间。
(4)有利于 SQL Server 对查询进行优化。
8.2创建索引的缺点
(1)创建索引要花费时间和占用存储空间。
(2)建立索引加快了数据检索速度,却减慢了数据修改速度。
9. 考虑建索引的列
如果在一个列上创建索引,该列就称为索引列。索引列中的值称为关键字值。考虑建
索引的有如下列:
(1)主键。
(2)连接中频繁使用的列。
(3)在某一范围内频繁搜索的列和按排序顺序频繁检索的列。
10. 不考虑建索引的列
建立索引需要产生一定的存储开销,在进行插入和更新数据的操作时,维护索引也要花费时间和空间,因此,没有必要对表中的所有列都建立索引。创建索引与否以及在哪些列上 建立索引,要看建立索引和维护索引的代价与因建立索引所节省的时间相比哪个更合算。 一般来说,如下一些列不考虑建立索引:
(1)很少或从来不在查询中引用的列,因为系统很少或从来不根据这个列的值去查找数据行。
(2)只有两个或几个值的列(如性别,只有两个值“男”或“女”),对这样的列创建索引并 不能得到建立索引的好处。
(3)以 bit、text、image 数据类型定义的列。
(4)数据行数很少的小表一般也没有必要创建索引。