12009-7-28 Information College · ChangJun
第 5章 表的管理
22009-7-28 Information College · ChangJun
[本章概要 ]
5.1 SQL 语言
5.2 SQL Server的命名规则
5.3 SQL Server的数据类型
5.4 表的创建、删除和修改
5.5 索引
32009-7-28 Information College · ChangJun
5.1 SQL 语言
SQL语言是关系数据库管理系统
( RDBMS)的 标准语言 。
SQL是 Structured Query Language的缩写,即结构化查询语言)。
42009-7-28 Information College · ChangJun
1、最早的 SQL原型是 IBM的研究人员在 70年代开发。
2、最早的 SQL标准是 1989年 4月由 ISO提出了具有完整性特征的 SQL,并称之为 SQL-89。
3,1992年 8月公布了 SQL-92(或称为 SQL2)
标准。
4,1999年颁布了 SQL-99或 SQL3 。
5,最新的 SQL标准是 2003年颁布的 SQL-2003
标准。
6、随着 SQL语言的颁布,各数据库厂商纷纷引入并扩展 SQL语言,在 SQL Server中支持的
SQL语言称为 Transact —SQL,简称 T –SQL。
5.1.1 SQL语言的发展
52009-7-28 Information College · ChangJun
一体化
高度非过程化
简洁
以多种方式使用
5.1.2 SQL语言的特点
62009-7-28 Information College · ChangJun
5.1.3 SQL语言的功能
SQL按其功能可分为三大部分:
Sql功能 命令动词数据定义
(DDL)
CREATE,DROP,ALTER
数据操纵
(DML)
SELECT INSERT,UPDATE、
DELETE
数据控制
(DCL)
GRANT,REVOKE,DENY
72009-7-28 Information College · ChangJun
服务器、数据库和数据库对象(例如表、视图、列、索引、触发器、过程、约束、规则等)的名称称为 标识符 。
1、标识符可以包含至多 128 个字符数,
本地临时表标识符最多可以包含 116 个字符。
2,标识符是在定义对象时创建的,以后用于引用该对象。
5.2 SQL Server的命名规则
82009-7-28 Information College · ChangJun
符合标识符的 格式规则 。规则是:
l 第一个字符必须是下列字符之一:
( 1) Unicode 标准 2.0 所定义的字母。
Unicode 中定义的字母包括拉丁字母 a-z
和 A-Z,以及来自其它语言的字母字符。
( 2)下划线 (_),at 符号 (@) 或者数字符号 (#)。
5.2.1 规则(常规)标识符
( Regular identifier)
92009-7-28 Information College · ChangJun
l 后续字符可以是:
( 1) Unicode 标准 2.0 所定义的字母。
( 2)来自基本拉丁字母或其它国家 /地区脚本的十进制数字。
( 3) at 符号、美元符号 ($)、数字符号或下划线。
l 标识符不能是 Transact-SQL 的保留字。 SQL Server 保留其保留字的大写形式。
l 不允许嵌入空格或其它特殊字符。
102009-7-28 Information College · ChangJun
1、分隔符类型不符合标识符格式规则的标识符必须使用分隔符。
Transact-SQL 所使用的分隔符类型:
l 被引用的标识符用方括号 ([ ]) 分隔:
如,SELECT * FROM [Blanks In Table Name]
l 符合所有标识符格式规则的标识符可以使用分隔符,也可以不使用分隔符。
5.2.2 分隔(界定)标识符( Regular
identifier)
112009-7-28 Information College · ChangJun
除非另外指定,否则所有对数据库对象名的
Transact-SQL 引用可以是由四部分组成的名称,
格式如下:
[[[server_name.][database_name].][owner_nam
e].]object_name
l server_name:指定链接服务器名称或远程服务器名称。
l database_name 指定该数据库的名称。
l owner_name 指定拥有该对象的用户。
l object_name 引用对象的名称。
5.2.3 对象命名规则
122009-7-28 Information College · ChangJun
当引用某个特定对象时,可以省略中间级节点,而使用句点表示这些位置。对象名的有效格式是:
server.database.owner.object
server.database..object
server..owner.object
server...object
database.owner.object
database..object
owner.object
对象
132009-7-28 Information College · ChangJun
在 SQL Server中,每个列、局部变量、
表达式和参数都有一个相关的数据类型,
这是指定对象可持有的数据类型(整型、
字符,money 等等)的特性。
SQL Server 提供系统数据类型集,定义了可与 SQL Server 一起使用的所有数据类型。
5.3.1 系统数据类型集
5.3 SQL Server的数据类型
142009-7-28 Information College · ChangJun
1、数值型:
bit:整型数据,值为 1 或 0,1字节。
tinyint:整型数据,从 0 到 255,1 字节。
smallint,整型数据,从 2^15 到 2^15-1,2 字节。
int,整型数据,从 –2^31 到 2^31-1,4 字节。
decimal:不带符号的整数,按 10 进位,2-17 字节
numeric,decimal( 十进制)的同义词,2-17 字节。
real,浮点精度数字数据,从 –3.40E+38 到
3.40E+38,4 字节。
float:可变长度的二进制数据,最大长度为 2^31-1
字节,8 字节。
下面列出系统提供的数据类型,
152009-7-28 Information College · ChangJun
char,固定长度的非 Unicode 字符数 据,最大长度为 8,000 个字符。 0 到 8000 字节,
具体取决于定义。
Varchar,可变长度的非 Unicode 数据,最大长度为 8000 个字符。存储大小是输入数据的实际长度。
Text,可变长度的非 Unicode 数据,最大长度为 2^31-1 个字符。 16 字节的指针,每个初始化列至少外加 2000 字节。
2、字符数据类型
162009-7-28 Information College · ChangJun
Nchar,固定长度的 Unicode 数据,最大长度为
4000 个字符。 0 到 4000 字节,具体取决于定义。
Nvarchar,可变长度的 Unicode 数据,最大长度为 4000 个字符。 存储大小是输入数据的实际长度。
ntext,可变长度的 Unicode 数据,最大长度为
2^30-1 个字符。 16 字节的指针,每个初始化列至少外加 2000 字节。
2、字符数据类型
172009-7-28 Information College · ChangJun
smalldattime
日期和时间数据,从 1900 年 1 月 1
日到 2079 年 6 月 6 日,精确到 1 分钟,
4 字节。
datetime
日期和时间数据,从 1753 年 1 月 1
日到 9999 年 12 月 31 日,精确到三百分之一秒,即 3.33 毫秒,8 字节。
3、日期 /时间数据类型
182009-7-28 Information College · ChangJun
money
货币数据值,从 –2^63 到 2^63-1,
精确到每个货币单位的万分之一,8 字节。
smallmoney
货币数据值,从 –214,748.3648 到
+214,748.3647,精确到每个货币单位的万分之一,4 字节。
4、货币数据类型
192009-7-28 Information College · ChangJun
image
可变长度的二进制数据,最大长度为 2^31-1
字节。 16 字节的指针,每个初始化列至少外加
2000 字节。
binary
固定长度的二进制数据,最大长度为 8,000
字节。 0到 8000 字节,具体取决于定义。
varbinary
可变长度的二进制数据,最大长度为 8000
字节。输入数据的长度再加 4 字节。
5、二进制数据类型
202009-7-28 Information College · ChangJun
1、用户定义数据类型用户定义数据类型基于系统数据类型,
其是系统提供的数据类型的别名。
当多个表的列中要存储同样类型的数据,且想确保这些列具有完全相同的数据类型、长度和为空性时,可使用用户定义数据类型。
例如,可以基于 char 数据类型创建名为
postal_code 的用户定义数据类型。
5.3.2 用户自定义数据类型
212009-7-28 Information College · ChangJun
创建用户定义的数据类型时必须提供以下三个参数:
l 名称
l 所依据的系统数据类型
l 为空性(数据类型是否允许空值)
222009-7-28 Information College · ChangJun
2、创建和删除用户定义数据类型如果用户定义数据类型是在 model 数据库中创建的,它将作用于所有用户定义的新数据库中。如果数据类型在用户定义的数据库中创建,则该数据类型只作用于此用户定义的数据库。
l 企业管理器
(演示)
232009-7-28 Information College · ChangJun
l Transact-SQL语句
( 1) sp_addtype,创建例如:创建一个名为 ssn
(社会保险号)的用户定义数据类型,它基于
SQL Server 提供的 varchar 数据类型。 ssn
数据类型用于那些保存 11 位数字的社会保险号 (999-99-9999) 的列。该列不能为 NULL。
USE master
EXEC sp_addtype ssn,'VARCHAR(11)',
'NOT NULL'
242009-7-28 Information College · ChangJun
( 2) sp_droptype,从 systypes 删除用户定义的数据类型例如:删除用户定义的数据类型 ssn。
USE master
EXEC sp_droptype 'birthday'
252009-7-28 Information College · ChangJun
表是包含数据库中所有数据的数据库对象。
表定义为列的集合。
与电子表格相似,数据在表中是按行和列的格式组织排列的。每行代表唯一的一条记录,而每列代表记录中的一个域。
5.4 表的创建、删除和修改
5.4.1 设计表每个表至多可定义 1024 列。
262009-7-28 Information College · ChangJun
表和列的命名要遵守标识符的规定,在特定表中必须是唯一的,但同一数据库中的不同表可使用相同的列名。必须为每列指定数据类型。
表有临时表与永久表之分。
临时表存储在 tempdb 中,当不再使用时会自动删除。临时表又有本地和全局两种类型的临时表,二者在名称、可见性和可用性上均不相同。
l 本地临时表 的名称以单个数字符号 (#) 打头;
它们仅对当前的用户连接是可见的;当用户从
SQL Server 2000 实例断开连接时被删除。
l 全局临时表 的名称以数字符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。
272009-7-28 Information College · ChangJun
设计表时应注意:
l 表所包含的数据的类型。
l 表的各列及每一列的数据类型(如果必要,还应注意列宽)。
l 哪些列允许空值。
l 是否要使用以及何时使用约束、默认设置或规则。
l 所需索引的类型,哪里需要索引,哪些列是主键,哪些是外键。
282009-7-28 Information College · ChangJun
与表有关的系统存储过程:
l sp_help,查看系统表( sysobjects和
syscoiumns)中,表和表中数据列的有关信息。
l sp_spaceused,查看表的行数以及表使用的存储空间的信息。
l sp_depends,查看表的相关关系。存储在系统表 sysdepends.
l sp_helpconstraint,查看约束信息
l sp_rename,重命名表名。
292009-7-28 Information College · ChangJun
示例列名 说明 数据类型 约束
Sno 学号 字符串,长度为 7 主码
Sname 姓名 字符串,长度为 10 非空
Ssex 性别 字符串,长度为 2 取‘男’或
‘女’
Sage 年龄 整数 取值 15~ 45
Sdept 所在系 字符串,长度为 20 默认为‘计算机系学生表( S)
302009-7-28 Information College · ChangJun
示例课程表( C)
列名 说明 数据类型 约束
Cno 课程号 字符串,长度为
10
主码
Cname 课程名 字符串,长度为
20
非空
Ccredit 学分 整数 取值大于 0
Semster 学期 整数 取值大于 0
Period 学时 整数 取值大于 0
312009-7-28 Information College · ChangJun
示例成绩表( SC)
列名 说明 数据类型 约束
Sno 学号 字符串,长度为
7
主码,引用 Student的外码
Cno 课程名 字符串,长度为
10
主码,引用 Course的外码
Grade 成绩 整数 取值 0~ 100
322009-7-28 Information College · ChangJun
1、使用企业管理器见教材 P131
2,使用 Transact-SQL
CREATE TABLE table_name
5.4.2 表的创建
332009-7-28 Information College · ChangJun
1、使用企业管理器见教材 P137
2、用 Transact-SQL
ALTER TABLE table_name
5.4.3 表的修改
342009-7-28 Information College · ChangJun
1、使用企业管理器见教材 P138
2,用 Transact-SQL
DROP TABLE table_name
5.4.4 表的删除
352009-7-28 Information College · ChangJun
可以利用索引快速访问数据库表中的特定信息。
索引是对数据库表中一个或多个列(例如,
employee 表的姓氏 (lname)列)的值进行排序的结构。
如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。
5.5.1 索引
5.5 索引
362009-7-28 Information College · ChangJun
索引列:可基于数据库表中的单列或多列创建索引。
l 单一索引
l 复合索引
SQL Server 提供两种形式的索引:
l 聚集( Clustered)索引表中各行的物理顺序与键值的逻辑(索引)
顺序相同。表只能包含一个聚集索引。 (字典中的拼音查字法 )
l 非聚集索引不根据键值排序,索引数据结构与数据行是分开的。(字典中的笔画查字法)
372009-7-28 Information College · ChangJun
1、企业管理器创建索引向导
2,Transact-SQL
l 创建:
CREATE INDEX index_name ON TABLE
(column[,… n])
l 删除:
DROP INDEX
5.5.2 索引的创建和删除