|
加入收藏
|
设为首页
|
证书查询
|
首页
|
中心简介
学院简介
中心简介
教学环境
教学模式
课程优势
清华风采
社会形象
大事记
清华声明
|
形象展示
视频下载
|
专业介绍
预科课程
软件工程师
网络工程师
短期课程
职业素养训练
学术专家在线
|
在线学习
net培训
java培训
sql数据库培训
|
证书展示
清华大学证书
工信部证书
学历证书
|
讲师风范
网络专业讲师
软件专业讲师
教务老师
职业规划师
就业指导教师
|
就业指导
网络招聘会
签约流程
战略合作企业
就业心得
就业成果
就业保障体系
面试试题
就业兵法
|
学员社区
学习心得
拓展活动
学生会成员
软件下载
|
班主任群
班主任通知
班主任工作
班主任介绍
班主任心得
|
报名咨询
咨询问题解答
我要报名
清华贴吧
|
就业联盟
免费体验
当前位置:
首页
>>
在线学习
>>
sql数据库培训
SQL 2005表的操作与管理
繁简对译:[
繁
简
] 字体设置:[
大
中
小
]
2008-09-27 阅读 次
第5章 表的操作与管理
5.1
数据类型
•
在
SQL Server2005
中,每个列、局部变量、表达式和参数都有其各自的数据类型。指定对象的数据类型相当于定义了该对象的四个特性:
(
1
)对象所含的数据类型,如字符、整数或二进制数。
(
2
)所存储值的长度或它的大小。
(
3
)数字精度(仅用于数字数据类型)。
(
4
)小数位数(仅用于数字数据类型)。
•
SQL Server
提供系统数据类型集,定义了可与
SQL Server
一起使用的所有数据类型;另外用户还可以使用
Transact-SQL
或
.NET
框架定义自己的数据类型,它是系统提供的数据类型的别名。每个表可以定义至多
250
个字段,除文本和图像数据类型外,每个记录的最大长度限制为
1962
个字节。
5.1.1
系统数据类型
1
、精确数字类型;
2
、近似数字类型;
3
、日期和时间类型;
4
、字符数据类型;
5
、
Unicode
字符数据类型;
6
、二进制字符数据类型;
7
、其它数据类型。
5.1.1
系统数据类型
1
、精确数字类型
(1)
精确数字类型包括:
•
整数类型
;
•
Bit
(位类型)
;
•
Decimal
和
Numeric
(数值类型)
;
•
Money
和
SmallMoney
(货币类型)。
5.1.1
系统数据类型
1、精确数字类型
(2)整数类型
:
整数类型是最常用的数据类型之一,它主要用来存储数值,可以直接进行数据运算,而不必使用函数转换。整数类型包括以下四类:
(
1
)
Bigint
:
Bigint
数据类型可以存储从
(-9223372036854775808)
到
(9223372036854775807)
范围之间的所有整型数据。每个
Bigint
数据类型值存储在
8
个字节中。
(
2
)
Int
(
Integer
):
Int
(或
integer
)数据类型可以存储从(
-2147483648
)到(
2147483647
)范围之间的所有正负整数。每个
Int
数据类型值存储在
4
个字节中。
(
3
)
Smallint
:可以存储从(
-32768
)到
32767
范围之间的所有正负整数。每个
smallint
类型的数据占用
2
个字节的存储空间。
(
4
)
Tinyint
:可以存储从
0~255
范围之间的所有正整数。每个
tinyint
类型的数据占用
1
个字节的存储空间。
5.1.1
系统数据类型
1、精确数字类型
(3)
位数据类型
•
Bit
称为位数据类型,其数据有两种取值:
0
和
1
,长度为
1
字节。在输入
0
以外的其他值时,系统均把它们当
1
看待。这种数据类型常作为逻辑变量使用,用来表示真、假或是、否等二值选择。
(4)Decimal
数据类型和
Numeric
数据类型
Decimal
数据类型和
Numeric
数据类型完全相同,它们可以提供小数所需要的实际存储空间,但也有一定的限制,可以用
2~17
个字节来存储
-1038+1
到
1038-1
之间的固定精度和小数位的数字。也可以将其写为
Decimal
(
p
,
s
)的形式,
p
和
s
确定了精确的总位数和小数位。其中
p
表示可供存储的值的总位数,默认设置为
18
;
s
表示小数点后的位数,默认设置为
0
。例如:
decimal
(
10
,
5
),表示共有
10
位数,其中整数
5
位,小数
5
位。
5.1.1
系统数据类型
1、精确数字类型
(5)
货币数据类型
货币数据类型包括
Money
和
SmallMoney
两种:
(
1
)
Money
:用于存储货币值,存储在
money
数据类型中的数值以一个正数部分和一个小数部分存储在两个
4
字节的整型值中,存储范围为(
-9223372136854775808
)到(
9223372136854775807
),精确到货币单位的千分之十。
(
2
)
Smallmoney
:与
money
数据类型类似,但范围比
money
数据类型小,其存储范围为
-2147483468
到
2147483467
之间,精确到货币单位的千分之十。
当为
money
或
smallmoney
的表输入数据时,必须在有效位置前面加一个货币单位符号。
5.1.1
系统数据类型
2、近似数字类型
•
近似数字类型包括Real和Float两大类。
(
1
)
Real
:可以存储正的或者负的十进制数值,最大可以有
7
位精确位数。它的存储范围从
-3.40E-38~3.40E+38
。每个
Real
类型的数据占用
4
个字节的存储空间。
(2)Float:可以精确到第15位小数,其范围从-1.79E-308~1.79E+308。如果不指定Float 数据类型的长度,它占用8个字节的存储空间。Float数据类型也可以写为Float(n)的形式,n指定Float数据的精度,n为1~15之间的整数值。当n取1~7时,实际上是定义了一个Real 类型的数据,系统用4个字节存储它;当n取8~15时,系统认为其是Float类型,用8个字节存储它。
5.1.1
系统数据类型
3. 日期和时间数据类型
(
1
)
Datetime
:用于存储日期和时间的结合体,它可以存储从公元
1753
年
1
月
1
日零时起
~
公元
9999
年
12
月
31
日
23
时
59
分
59
秒之间的所有日期和时间,其精确度可达三百分之一秒,即
3.33
毫秒。
Datetime
数据类型所占用的存储空间为
8
个字节,其中前
4
个字节用于存储基于
1900
年
1
月
1
日
之前或者之后日期数,数值分正负,负数存储的数值代表在基数日期之前的日期,正数表示基数日期之后的日期,时间以子夜后的毫秒存储在后面的
4
个字节中。当存储
Datetime
数据类型时,默认的格式是
MM DD YYYY hh:mm A.M./P.M
,当插入数据或者在其他地方使用
Datetime
类型时,需要用单引号把它括起来。默认的时间日期是
January 1,1900 12:
00 A
.M
。可以接受的输入格式如下:
Jan 4 1999
、
JAN 4 1999
、
January 4 1999
、
Jan 1999 4
、
1999 4 Jan
和
1999 Jan 4
。
(2)Smalldatetime:与Datetime数据类型类似,但其日期时间范围较小,它存储从
1900年1月1日
~2079年6月6日内的日期。SmallDatetime数据类型使用4个字节存储数据,SQL Server 2000用2个字节存储日期
1900年1月1日
以后的天数,时间以子夜后的分钟数形式存储在另外两个字节中,SmallDatetime的精度为1分钟。
5.1.1
系统数据类型
4. 字符数据类型
•
字符数据类型也是SQL Server中最常用的数据类型之一,它可以用来存储各种字母、数字符号和特殊符号。在使用字符数据类型时,需要在其前后加上英文单引号或者双引号。
(
1
)
Char
:其定义形式为
Char
(
n
),当用
Char
数据类型存储数据时,每个字符和符号占用一个字节的存储空间。
n
表示所有字符所占的存储空间,
n
的取值为
1~8000
。若不指定
n
值,系统默认
n
的值为
1
。若输入数据的字符串长度小于
n
,则系统自动在其后添加空格来填满设定好的空间;若输入的数据过长,将会截掉其超出部分。如果定义了一个
Char
数据类型,而且允许该列为空,则该字段被当作
Varchar
来处理。
(
2
)
Varchar
:其定义形式为
Varchar
(
n
)。用
Char
数据类型可以存储长达
255
个字符的可变长度字符串,和
Char
类型不同的是
Varchar
类型的存储空间是根据存储在表的每一列值的字符数变化的。例如定义
Varchar
(
20
),则它对应的字段最多可以存储
20
个字符,但是在每一列的长度达到
20
字节之前系统不会在其后添加空格来填满设定好的空间,因此使用
Varchar
类型可以节省空间。
(3)Text:用于存储文本数据,其容量理论上为1~231-1(2,147,483,647)个字节,但实际应用时要根据硬盘的存储空间而定。
5.1.1
系统数据类型
5. Unicode 字符数据类型
•
Unicode 字符数据类型包括Nchar、Nvarchar、Ntext三种:
(
1
)
Nchar
:其定义形式为
Nchar
(
n
)。它与
Char
数据类型类似,不同的是
Nchar
数据类型
n
的取值为
1~4000
。
Nchar
数据类型采用
Unicode
标准字符集,
Unicode
标准用两个字节为一个存储单位,其一个存储单位的容纳量就大大增加了,可以将全世界的语言文字都囊括在内,在一个数据列中就可以同时出现中文、英文、法文等,而不会出现编码冲突。
(
2
)
Nvarchar
:其定义形式
Nvarchar
(
n
)。它与
Varchchar
数据类型相似,
Nvarchar
数据类型也采用
Unicode
标准字符集,
n
的取值范围为
1~4000
。
(3)Ntext:与Text数据类型类似,存储在其中的数据通常是直接能输出到显示设备上的字符,显示设备可以是显示器、窗口或者打印机。Ntext数据类型采用Unicode标准字符集,因此其理论上的容量为230-1(1,073,741,823)个字节。
5.1.1
系统数据类型
6. 二进制字符数据类型
•
二进制数据类型包括Binary、Varbinary、Image三种:
(
1
)
Binary
:其定义形式为
Binary
(
n
),数据的存储长度是固定的,即
n+4
个字节,当输入的二进制数据长度小于
n
时,余下部分填充
0
。二进制数据类型的最大长度(即
n
的最大值)为
8000
,常用于存储图像等数据。
(
2
)
Varbinary
:其定义形式为
Varbinary
(
n
),数据的存储长度是变化的,它为实际所输入数据的长度加上
4
字节。其他含义同
Binary
。
(3)Image:用于存储照片、目录图片或者图画,其理论容量为231-1(2,147,483,647)个字节。其存储数据的模式与Text数据类型相同,通常存储在Image字段中的数据不能直接用Insert语句直接输入。
5.1.1
系统数据类型
7. 其它数据类型
(
1
)
Sql_variant
:用于存储除文本、图形数据和
Timestamp
类型数据外的其他任何合法的
SQL Server
数据。此数据类型极大地方便了
SQL Server
的开发工作。
(
2
)
Table
:用于存储对表或者视图处理后的结果集。这种新的数据类型使得变量可以存储一个表,从而使函数或过程返回查询结果更加方便、快捷。
(
3
)
Timestamp
:亦称时间戳数据类型,它提供数据库范围内的惟一值,反应数据库中数据修改的相对顺序,相当于一个单调上升的计数器。当它所定义的列在更新或者插入数据行时,此列的值会被自动更新,一个计数值将自动地添加到此
Timestamp
数据列中。如果建立一个名为
“
Timestamp”
的列,则该列的类型将自动设为
Timestamp
数据类型。
(
4
)
Uniqueidentifier
:用于存储一个
16
字节长的二进制数据类型,它是
SQL Server
根据计算机网络适配器地址和
CPU
时钟产生的全局惟一标识符代码(
Globally Unique Identifier
,简写为
GUID
)。此数字可以通过调用
SQL Server
的
newid
()函数获得,在全球各地的计算机经由此函数产生的数字不会相同。
(
5
)
XML
:可以存储
XML
数据的数据类型。利用它可以将
XML
实例存储在字段中或者
XML
类型的变量中。注意存储在
XML
中的数据不能超过
2GB
。
(6)Cursor:这是变量或存储过程OUTPUT 参数的一种数据类型,这些参数包含对游标的引用。使用 Cursor 数据类型创建的变量可以为空。注意:对于 CREATE TABLE 语句中的列,不能使用Cursor 数据类型。
5.1.2
自定义数据类型
•
SQL Server允许用户自定义数据类型,用户自定义数据类型是建立在SQL Server系统数据类型基础上的,当用户定义一种数据类型时,需要指定该类型的名称、建立在其上的系统数据类型以及是否允许为空等。
•
SQL Server为用户提供了两种方法来创建自定义数据类型:
(
1
)使用SQL Server管理平台创建用户自定义数据类型;
(2)利用系统存储过程创建用户自定义数据类型
5.1.2
自定义数据类型
(
1
)使用SQL Server管理平台创建用户自定义数据类型
在SQL Server管理平台中,打开指定的服务器和数据库项,如图5-1所示,选择并展开“程序→类型”项,接下来用右键单击“用户自定义数据类型”选项,从弹出的快捷菜单中选择“新建”命令,出现用户定义的数据类型属性对话框,如图5-2所示。
5.1.2
自定义数据类型
(
2
)利用系统存储过程创建用户自定义数据类型
•
系统存储过程
sp_addtype
为用户提供了用
T_SQL
语句创建自定义数据类型的途径,其语法形式如下:
sp_addtype [@typename=] type,
[@phystype=] system_data_type
[, [@nulltype=] ‘null_type’]
[, [@owner=] ‘owner_name’]
5.1.2
自定义数据类型
(
2
)利用系统存储过程创建用户自定义数据类型
•
例
5-1
自定义一个地址(
address
)数据类型。
程序清单如下:
exec sp_addtype address, ‘varchar
(
80
)
’
, ‘not null’
5.2
表操作
表是包含数据库中所有数据的数据库对象。表定义为列的集合,数据在表中是按行和列的格式组织排列的,每行代表惟一的一条记录,而每列代表记录中的一个域。
5.2.1
创建表
5.2.2
创建约束
5.2.3
修改表
5.2.4
查看表
5.2.5
删除表
5.2.1
创建表
•
利用SQL Server管理平台创建表
在
SQL Server
管理平台中,展开指定的服务器和数据库,打开想要创建新表的数据库,右击表对象,并从弹出的快捷菜单中选择
“
新建表
”
选项,如图
5-4
所示。在图
5-4
的对话框中,可以对表的结构进行更改,设置主键及字段属性,使用
SQL Server
管理平台可以非常直观地修改数据库结构和添加数据。在表中任意行上右击,则弹出一个快捷菜单,如图
5-6
所示。
5.2.1
创建表
2. 利用create命令创建表
•
使用
create
命令创建表非常灵活,它允许对表设置几种不同的选项,包括表名、存放位置和列的属性等。
•
其完整语法形式如下:
CREATE TABLE
[database_name.[owner].|owner.]table_name
(
{<column_definition>|column_name AS computed_column_expression|
<table_constraint>}[
,
…n]
)
[ON{ filegroup|DEFAULT}]
[TEXTIMAGE_ON { filegroup|DEFAULT}]
<column_definition>::={column_name data_type}
[COLLATE <collation_name>]
[[DEFAULT constant_expression]
|[IDENTITY[
(
seed,increment
)
[NOT FOR REPLICATION]]]]
[ROWGUIDCOL]
[<column_constraint>][...n]
5.2.1
创建表
2. 利用create命令创建表
其中,各参数的说明如下
:
•
database_name
:用于指定所创建表的数据库名称。
•
owner
:用于指定新建表的所有者的用户名。
•
table_name
:用于指定新建表的名称。
•
column_name
:
用于指定新建表的列名。
•
computed_column_expression
:用于指定计算列的列值表达式。
•
ON {filegroup | DEFAULT}
:用于指定存储表的文件组名。
•
TEXTIMAGE_ON
:用于指定
text
、
ntext
和
image
列的数据存储的文件组。
•
data_type
:用于指定列的数据类型。
•
DEFAULT
:用于指定列的默认值。
•
constant_expression
:用于指定列的默认值的常量表达式、可以为一个常量或
NULL
或系统函数。
•
IDENTITY
:用于将列指定为标识列。
Seed
:用于指定标识列的初始值。
Increment
:用于指定标识列的增量值。
•
NOT FOR REPLICATION
:用于指定列的
IDENTITY
属性,在把从其他表中复制的数据插入到表中时不发生作用,即不生成列值,使得复制的数据行保持原来的列值。
•
ROWGUIDCOL
:用于将列指定为全局惟一标识行号列(
row global unique identifier column
)。
•
COLLATE
:用于指定表的校验方式。
•
column_constraint
和
table_constraint
:用于指定列约束和表约束。
5.2.1
创建表
2. 利用create命令创建表
•
例
5-3
创建了一个工人信息表,它包括工人编号、姓名、性别、出生日期、职位、工资和备注信息。
•
SQL
语句的程序清单如下:
CREATE TABLE worker
(
number
char(8)
not null,
name
char
(
8
)
NOT NULL,
sex
char
(
2
)
NULL,
birthday
datetime
null,
job_title
varchar
(
10
)
null,
salary
money
null,
memo
ntext
null
)
5.2.2
创建约束
•
约束是
SQL Server
提供的自动保持数据库完整性的一种方法,它通过限制字段中数据、记录中数据和表之间的数据来保证数据的完整性。在
SQL SERVER
中,对于基本表的约束分为列约束和表约束。
•
列约束是对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名;表约束与列定义相互独立,不包括在列定义中,通常用于对多个列一起进行约束,与列定义用
’
,’
分隔,定义表约束时必须指出要约束的那些列的名称。
•
完整性约束的基本语法格式为:
[CONSTRAINT constraint_name
(约束名)
] <
约束类型
>
约束不指定名称时,系统会给定一个名称。
•
在SQL Server 2005中有6种约束:主键约束(primary key constraint)、惟一性约束(unique constraint)、检查约束(check constraint)、默认约束(default constraint)、外部键约束(foreign key constraint)和空值(NULL)约束。
5.2.2
创建约束
•
主键(PRIMARY KEY)约束
•
PRIMARY KEY
约束用于定义基本表的主键,它是惟一确定表中每一条记录的标识符,其值不能为
NULL
,也不能重复,以此来保证实体的完整性。
PRIMARY KEY
与
UNIQUE
约束类似,通过建立唯一索引来保证基本表在主键列取值的唯一性,但它们之间存在着很大的区别:
①在一个基本表中只能定义一个
PRIMARY KEY
约束,但可定义多个
UNIQUE
约束;
②对于指定为
PRIMARY KEY
的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于
UNIQUE
所约束的唯一键,则允许为空。
•
注意:不能为同一个列或一组列既定义
UNIQUE
约束,又定义
PRIMARY KEY
约束。
•
PRIMARY KEY
既可用于列约束,也可用于表约束。
5.2.2
创建约束
•
主键(PRIMARY KEY)约束
主键的创建操作方法有两种:
SQL Server
管理平台操作法和
Transact-SQL
语句操作法。
(
1
)
SQL Server
管理平台操作法,如图
5-7
所示。
5.2.2
创建约束
•
主键(PRIMARY KEY)约束
(
2
)使用
Transact-SQL
语句操作法设置主键约束,其语法形式如下:
CONSTRAINT
constraint_name
PRIMARY
KEY
[CLUSTERED|NONCLUSTERED]
(
column_name
)
•
PRIMARY KEY
用于定义表约束时,即将某些列的组合定义为主键,其语法格式如下:
CONSTRAINT
constraint_name
PRIMARY
KEY
[CLUSTERED|NONCLUSTERED]
(
column_name[,…n]
)
5.2.2
创建约束
•
主键(PRIMARY KEY)约束
例
5-5
建立一个
SC
表,定义
SNO
,
CNO
共同组成
SC
的主键
程序清单如下:
CREATE TABLE SC
(SNO CHAR(5) NOT NULL,
CNO CHAR(5) NOT NULL,
SCORE NUMERIC(3),
CONSTRAINT SC_PRIM PRIMARY KEY(SNO,CNO))
5.2.2
创建约束
2. 惟一性约束
惟一性约束用于指定一个或者多个列的组合值具有惟一性,以防止在列中输入重复的值。定义了
UNIQUE
约束的那些列称为唯一键,系统自动为唯一键建立唯一索引,从而保证了唯一键的唯一性。
当使用惟一性约束时,需要考虑以下几个因素:
•
使用惟一性约束的字段允许为空值;
•
一个表中可以允许有多个惟一性约束;
•
可以把惟一性约束定义在多个字段上;
•
惟一性约束用于强制在指定字段上创建一个惟一性索引;
•
默认情况下,创建的索引类型为非聚集索引。
5.2.2
创建约束
2. 惟一性约束
创建惟一性约束的方法有两种:通过
SQL Server
管理平台可以完成创建和修改惟一性约束的操作;使用
Transact-SQL
语句完成惟一性约束的操作。
(
1
)通过
SQL Server
管理平台可以完成创建和修改惟一性约束的操作,如图
5-8
所示。
5.2.2
创建约束
2. 惟一性约束
(
2
)使用
Transact-SQL
语句完成惟一性约束的操作,其语法形式如下:
CONSTRAINT
constraint_name
UNIQUE
[CLUSTERED|NONCLUSTERED]
(
column_name[,…n]
)
例
5-6
创建一个学生信息表,其中
name
字段具有惟一性。
程序清单如下:
Create
table
student
(
id
char
(
8
)
,
name
char
(
10
)
,
sex
char
(
2
)
,
constraint
pk_id
primary
key
(
id
)
,
constraint
uk_identity
unique
(
name
)
)
5.2.2
创建约束
3. 检查约束
检查约束对输入列或者整个表中的值设置检查条件
,
以限制输入值
,
保证数据库数据的完整性。
当使用检查约束时,应该考虑和注意以下几点:
•
一个列级检查约束只能与限制的字段有关;一个表级检查约束只能与限制的表中字段有关;
•
一个表中可以定义多个检查约束;
•
每个
CREATE TABLE
语句中每个字段只能定义一个检查约束;
•
在多个字段上定义检查约束,则必须将检查约束定义为表级约束;
•
当执行
INSERT
语句或者
UPDATE
语句时,检查约束将验证数据;
•
检查约束中不能包含子查询。
5.2.2
创建约束
3. 检查约束
创建检查约束常用的操作方法有如下两种
:使用
SQL Server
管理平台创建检查约束;用
Transact-SQL
语句创建检查约束。
(
1
)使用
SQL Server
管理平台创建检查约束,如图
5-9
所示。
5.2.2
创建约束
3. 检查约束
(
2
)用
Transact-SQL
语句创建检查约束。
用
Transact-SQL
语句创建检查约束。其语法形式如下:
CONSTRAINT
constraint_name
CHECK
[NOT FOR REPLICATION]
(logical_expression)
例
5-8
建立一个
SC
表
,
定义
SCORE
的取值范围为
0
到
100
之间。
程序清单如下
:
CREATE TABLE SC
(SNO CHAR(5),
CNO CHAR(5),
SCORE NUMERIC(5,1) CONSTRAINT SCORE_CHK CHECK(SCORE>=0 AND SCORE <=100))
5.2.2
创建约束
4. 默认(DEFAULT)约束
默认约束指定在插入操作中如果没有提供输入值时,则系统自动指定值。默认约束可以包括常量、函数、不带变元的内建函数或者空值。
使用默认约束时,应该注意以下几点:
(
1
)每个字段只能定义一个默认约束;
(
2
)如果定义的默认值长于其对应字段的允许长度,那么输入到表中的默认值将被截断;
(
3
)不能加入到带有
IDENTITY
属性或者数据类型为
timestamp
的字段上;
(
4
)如果字段定义为用户定义的数据类型,而且有一个默认绑定到这个数据类型上,则不允许该字段有默认约束。
5.2.2
创建约束
4. 默认(DEFAULT)约束
创建默认约束常用的操作方法有如下两种:使用
SQL Server
管理平台创建默认约束;创建默认约束的
Transact-SQL
语句操作法。
(
1
)使用
SQL Server
管理平台创建默认约束,如图
5-10
所示。
5.2.2
创建约束
4. 默认(DEFAULT)约束
(
2
)创建默认约束的
Transact-SQL
语句操作法。其语法形式如下:
CONSTRAINT
constraint_name
DEFAULT
constraint_expression
[FOR
column_name]
例
5-10
为
dept
字段创建默认约束。
程序清单如下:
constraint
con_dept
default
‘
计算机
’
for
dept
5.2.2
创建约束
5. 外部键约束
外键
(FOREIGN KEY)
是用于建立和加强两个表数据之间的链接的一列或多列。外部键约束用于强制参照完整性。
当使用外部键约束时,应该考虑以下几个因素:
•
外部键约束提供了字段参照完整性;
•
外部键从句中的字段数目和每个字段指定的数据类型都必须和
REFERENCES
从句中的字段相匹配;
•
外部键约束不能自动创建索引,需要用户手动创建;
•
用户想要修改外部键约束的数据,必须有对外部键约束所参考表的
SELECT
权限或者
REFERENCES
权限;
•
参考同一表中的字段时,必须只使用
REFERENCES
子句,不能使用外部键子句;
•
一个表中最多可以有
31
个外部键约束;
•
在临时表中,不能使用外部键约束;
•
主键和外部键的数据类型必须严格匹配
5.2.2
创建约束
5. 外部键约束
创建外部键约束常用的操作方法有如下两种:在
SQL Server
管理平台中添加外部键约束;使用
Transact-SQL
语句设置外部键约束。
(
1
)在
SQL Server
管理平台中添加外部键约束,在
SQL Server
管理平台中添加外部键约束。如图
5-11
,
5-12
所示。
5.2.2
创建约束
5. 外部键约束
(
2
)使用
Transact-SQL
语句设置外部键约束
,其语法形式如下:
CONSTRAINT
constraint_name
FOREIGN
KEY
(
column_name[,…n]
)
REFERENCES
ref_table
[
(
ref_column[,…n]
)
]
例
5-11
建立一个
SC
表,定义
SNO,CNO
为
SC
的外部键。
程序清单如下:
CREATE TABLE SC
(SNO CHAR(5) NOT NULL
CONSTRAINT S_FORE FOREIGN KEY REFERENCES S(SNO),
CNO CHAR(5) NOT NULL
CONSTRAINT C_FORE FOREIGN KEY REFERENCES C(CNO),
SCORE NUMERIC(3),
CONSTRAINT S_C_PRIM PRIMARY KEY (SNO,CNO))
5.2.2
创建约束
6. 空值(NULL)约束
•
空值(
NULL
)约束用来控制是否允许该字段的值为
NULL
。
NULL
值不是
0
也不是空白,更不是填入字符串的
“
NULL”
字符串,而是表示
“
不知道
”
、
“
不确定
”
或
“
没有数据
”
的意思。
•
当某一字段的值一定要输入才有意义的时候,则可以设置为
NOT NULL
。如主键列就不允许出现空值,否则就失去了唯一标识一条记录的作用。空值(
NULL
)约束只能用于定义列约束。
•
创建空值(
NULL
)约束常用的操作方法有如下两种:
(
1
)在
SQL Server
管理平台中添加空值(
NULL
)约束;
(
2
)使用
Transact-SQL
语句设置空值(
NULL
)约束。
5.2.2
创建约束
6. 空值(NULL)约束
(
1
)在
SQL Server
管理平台中添加空值(
NULL
)约束。如图
5-14
所示。
5.2.2
创建约束
6. 空值(NULL)约束
(
2
)使用
Transact-SQL
语句设置空值(
NULL
)约束,
其语法形式如下:
[CONSTRAINT <
约束名
> ][NULL|NOT NULL]
例
5-13
建立一个
S
表,对
SNO
字段进行
NOT NULL
约束。
程序清单如下:
CREATE TABLE S
(SNO CHAR(10) CONSTRAINT S_CONS NOT NULL,
SN VARCHAR(20),
AGE INT,
SEX CHAR(2) DEFAULT ’
男
’ ,
DEPT VARCHAR(20))
5.2.3
修改表
当数据库中的表创建完成后,可以根据需要改变表中原先定义的许多选项,以更改表的结构。用户可以增加、删除和修改列,增加、删除和修改约束,更改表名以及改变表的所有者等。
1
、修改列属性
修改列属性包括以下一些内容:
(
1
)修改列的数据类型;
(
2
)修改列的数据长度;
(
3
)修改列的精度;
(
4
)修改列的小数位数;
(
5
)修改列的为空性。
5.2.3
修改表
2
、添加和删除列
在
SQL Server 2005
中,如果列允许空值或对列创建
DEFAULT
约束,则可以将列添加到现有表中。将新列添加到表时,
SQL Server 2005
数据库引擎在该列为表中的每个现有数据行插入一个值。因此,在向表中添加列时向列添加
DEFAULT
定义会很有用。如果新列没有
DEFAULT
定义,则必须指定该列允许空值。数据库引擎将空值插入该列,如果新列不允许空值,则返回错误。
反之,可以删除现有表中的列,但具有下列特征的列不能被删除:
(
1
)用于索引;
(
2
)用于
CHECK
、
FOREIGN KEY
、
UNIQUE
或
PRIMARY KEY
约束;
(
3
)与
DEFAULT
定义关联或绑定到某一默认对象;
(
4
)绑定到规则;
(
5
)已注册支持全文;
(
6
)用作表的全文键。
5.2.3
修改表
3
、增加、修改和删除约束
(
1
)增加、修改和删除
PRIMARY KEY
约束。
(
2
)增加、修改和删除
UNIQUE
约束。
(
3
)增加、修改和删除
CHECK
约束。
(
4
)增加、修改和删除
DEFAULT
约束。
(
5
)增加、修改和删除
FOREIGN KEY
约束。
(
6
)增加和修改标识符列。只能为每个表创建一个标识符列和一个
GUID
列。
5.2.3
修改表
例
5-14
创建一个雇员信息表,然后在表中增加一个
salary
字段,删除表中的
age
字段,并且修改
memo
字段的数据类型。
SQL
语句的程序清单如下:
create table employees
(
id
char
(
8
)
primary key,
name
char
(
20
)
not null,
department
char
(
20
)
null,
memo
char
(
30
)
null,
age
int
null,
)
alter
table
employees
add
salary
int
null,
drop
column
age,
alter
column
memo
varchar
(
200
)
null
5.2.3
修改表
例
5-15
在
S
表中增加一个班号列和住址列。
SQL
语句的程序清单如下:
ALTER TABLE S
ADD
CLASS_NO CHAR(6),
ADDRESS CHAR(40)
注意
:
使用此方式增加的新列自动填充
NULL
值
,
所以不能为增加的新列指定
NOT NULL
约束。
例
5-16
在
SC
表中增加完整性约束定义,使
SCORE
在
0-100
之间。
SQL
语句的程序清单如下:
ALTER TABLE SC
ADD
CONSTRAINT SCORE_CHK CHECK(SCORE BETWEEN 0 AND 100)
5.2.4
查看表
当在数据库中创建了表后,有时需要查看表的有关信息。比如表的属性、定义、数据、字段属性和索引等。尤其重要的是查看表内存放的数据,另外有时需要查看表与其他数据库对象之间的依赖关系。
1.
查看表的定义
,如图
5-15
,
5-16
所示。
5.2.4
查看表
2.
查看表中存储的数据,如图
5-17
,
5-18
所示。
5.2.4
查看表
3.
查看表与其他数据库对象的依赖关系,如图
5-19
所示。
5.2.4
查看表
4.
利用系统存储过程查看表的信息
系统存储过程
Sp_help
可以提供指定数据库对象的信息,也可以提供系统或者用户定义的数据类型的信息,其语法形式如下:
sp_help [[@objname=]name]
例
5-17
(
1
)
显示当前数据库中所有对象的信息
;(
2
)
显示表
Person.Contact
的信息。在
SQL Server
管理平台的查询窗口中,它们对应的语句和运行结果如图
5-20
和图
5-21
所示
5.2.5
删除表
1.
利用管理平台删除表
在
SQL Server
管理平台中,展开指定的数据库和表,右击要删除的表,从弹出的快捷菜单中选择
“
删除
”
选项,则出现除去对象对话框,如图
5-25
所示。
5.2.5
删除表
2.
利用
DROP TABLE
语句删除表
•
DROP TABLE
语句可以删除一个表和表中的数据及其与表有关的所有索引、触发器、约束、许可对象。
•
DROP TABLE
语句的语法形式如下:
DROP TABLE table_name
•
要删除的表如果不在当前数据库中,则应在
table_name
中指明其所属的数据库和用户名。在删除一个表之前要先删除与此表相关联的表中的外部关键字约束。当删除表后,绑定的规则或者默认值会自动松绑。
•
例
5-18
删除
company
数据库中的表
employee
。
程序如下:
drop
table
company.dbo.employee
5.3
索引操作
索引是数据库随机检索的常用手段,它实际上就是记录的关键字与其相应地址的对应表。通过索引可大大提高查询速度。此外,在
SQL SERVER
中,行的唯一性也是通过建立唯一索引来维护的。
使用索引可以大大提高系统的性能,其具体表现在:
(
1
)通过创建惟一索引,可以保证数据记录的惟一性。
(
2
)可以大大加快数据检索速度。
(
3
)可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。
(
4
)在使用
ORDER BY
和
GROUP BY
子句进行检索数据时,可以显著减少查询中分组和排序的时间。
(
5
)使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能
5.3.1
创建索引
SQL Server 2005
提供了如下几种创建索引的方法:
1.
利用
SQL Server
管理平台创建索引;
2.
利用
Transact-SQL
语句中的
CREATE INDEX
命令创建索引。
另外,可以在创建表的
PRIMARY KEY
或
UNIQUE
约束时自动创建索引。
5.3.1
创建索引
1.
利用
SQL Server
管理平台创建索引。
(1)
展开指定的服务器和数据库,选择要创建索引的表,展开该表,选择
“
索引
”
选项(如图
5-26
所示),右键单击索引,从弹出的快捷菜单中选择
“
新建索引
”
,就会出现新建索引对话框,如图
5-27
所示。
5.3.1
创建索引
1.利用SQL Server管理平台创建索引。
(
2
)点击
“
添加
”
按钮,可选择用于创建索引的字段,如图
5-28
所示。
(
3
)打开创建索引对话框的选项页框,在此还可以设定索引的属性
,
如图
5-29
所示。
5.3.1
创建索引
2.
利用
Transact-SQL
语句中的
CREATE INDEX
命令创建索引
CREATE INDEX
命令既可以创建一个可改变表的物理顺序的聚集索引,也可以创建提高查询性能的非聚集索引,其语法形式如下:
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ]
INDEX index_name ON { table | view }
(
column [ ASC | DESC ]
[ ,...n ]
)
[with
[PAD_INDEX]
[[,]FILLFACTOR=fillfactor]
[[,]IGNORE_DUP_KEY]
[[,]DROP_EXISTING]
[[,]STATISTICS_NORECOMPUTE]
[[,]SORT_IN_TEMPDB]
]
[ ON filegrou
p
]
5.3.1
创建索引
2.
利用
Transact-SQL
语句中的
CREATE INDEX
命令创建索引
例
5-19
为表
employees
创建了一个惟一聚集索引。
程序清单如下
:
CREATE UNIQUE CLUSTERED INDEX number_ind
ON employees
(
number
)
with
pad_index,
fillfactor=20,
ignore_dup_key,
drop_existing,
statistics_norecompute
5.3.2
查看、修改和删除索引
•
利用
SQL Server
管理平台查看、修改和删除索引。
(
1
)在
SQL Server
管理平台中,展开指定的服务器和数据库项,并展开要查看的表,从选项中选择
“
索引
”
选项,则会出现表中已存在的索引列表。双击某一索引名称,则出现索引属性对话框,如图
5-30
所示。索引碎片管理页框如图
5-31
所示。
5.3.2
查看、修改和删除索引
1.
利用
SQL Server
管理平台查看、修改和删除索引。
(
2
)扩展属性对话框,如图
5-32
所示,主要包含数据库名称,校对模式等。
通过右键单击索引名称,选择
“
创建索引脚本到新的查询分析器窗口
”
,则可以查看创建索引的
SQL
脚本语句,如图
5-33
所示。
5.3.2
查看、修改和删除索引
2.
用系统存储过程查看和更改索引名称
系统存储过程
sp_helpindex
可以返回表的所有索引信息,其语法形式如下;
sp_helpindex [@objname=]’name’
其中
,
[@objname=]’name’
参数用于指定当前数据库中的表的名称。
另外,系统存储过程
sp_rename
可以用来更改索引的名称,其语法形式如下:
sp_rename[@objname=]'object_name',
[@newname=]'new_name'
[ , [ @objtype = ] 'object_type' ]
5.3.2
查看、修改和删除索引
2.
用系统存储过程查看和更改索引名称
例
5-21
使用系统存储过程
sp_helpindex
来查看表
authors
的索引信息。
运行结果如下图所示。
5.3.2
查看、修改和删除索引
3.
使用
Transact-SQL
语句中的
DROP INDEX
命令删除索引
•
当不再需要某个索引时,可以将其删除,
DROP INDEX
命令可以删除一个或者多个当前数据库中的索引,其语法形式如下:
DROP INDEX 'table.index | view.index' [ ,...n ]
•
其中
,
table | view
用于指定索引列所在的表或索引视图
;
index
用于指定要删除的索引名称。
例
5-23
删除表
employees
中的索引
employees_name_index
。
程序清单如下
:
drop index employees.employees_name_index
上一篇:SQL 2005查询技术
下一篇:SQL 2005数据库管理
相关文章
浪潮通信信息系统有限公司
”五一“放假通知
面试就像推销 商品就是自己
Spring 让 LOB 数据操作变得简单易行
JSTL基础知识
DWR实例教程
IT人不可不听的10个职场故事!
解决两个网络丢包现象的排错过程
打印
收藏
关闭