第4章 关系数据库管理系统
与T-SQL语言
SQL Server数据库创建和维护
T-SQL语言
视图、存储过程和触发器
数据库管理和保护
数据库管理系统DBMS
负责数据库中数据的存储、查找、增加、删除、修改操作,并维护数据的完整性、并发性、安全性等。
Microsoft SQL Server 2000概述
Microsoft SQL Server 2000(简称SQL Server)是Microsoft公司在Windows平台上开发的一个基于客户机/服务器(C/S) 模式的关系数据库管理系统。
网络
客户机
客户机
SQLServer数据库服务器
客户机应用程序负责商业逻辑和向用户提供数据。
服务器对数据库的数据进行操作和管理。
SQL Server特性
(1) 图形化的操作环境,易于学习和使用。
(2) 高性能的数据库管理和使用功能。
(3) 可伸缩性和高度可用性。
(4)与Internet应用的集成。
(5) 对数据仓库的支持。
a.根据用户访问量动态使用系统的软、硬件资源;
b.可支持从 KB 大小的个人数据库到TB 数量级的企业数据库;
Serve具有维护7*24小时运行的 Web 站点和企业系统所需的极高的可用性级别。
数据库引擎提供了丰富且完整的XML支持,利用XML语言可以轻松地存储和检索数据,并将查询结果直接用于各种网页程序。
a.数据库的设计、创建、维护和使用方便和快捷;
b.支持高性能的数据库系统,并提供充分的数据库完整性保护;
c.分布式查询可以查询来自不同数据源的数据,从而与 SQL Server数据库中的数据集成。
SQL Server主要管理工具
SQL Server提供了一整套数据库系统管理工具和实用程序,打开“开始/程序/Microsoft SQL Server”菜单即可看到如下所示的SQL Server主要工具:
1.服务管理器(SQL Server Services Manager)
SQL Server服务管理器的作用:启动、停止或暂停SQL Server服务器所支持的服务。
服务有3种状态:
停止(红色):该服务没有启动,所有与SQL Server连接的客户端全部断开。
启动(绿色):服务正常运行,相关管理和服务功能可用。
暂停(黄色):暂停状态时,已连接的客户端任务可以完成,不允许新的连接。
选择该复选框可以在启动操作系统时自动启动所选择的SQL Server服务。
表示服务管理器处于启动状态
表4-1 SQL Server提供的主要服务
分布式事务处理协调器
管理分布式事务,它允许客户端应用程序在一个事务中包含多个不同的数据源
Distributed Transaction Coordinator
(分布式事务处理协调器服务DTC)
作业、报警、操作员等
作业调度和管理,可支持数据库定时、自动备份、维护,监视数据库、异常告警等功能,必需和SQL Server服务一起使用
SQL Server Agent
(SQL Server代理服务)
数据管理(创建、维护数据库等)、T-SQL处理、并发控制、数据完整性控制等
是SQL Server的核心服务组件,是实际的数据库服务器,该服务启动后,客户端才可以连接服务器上。一般的数据库功能都由它提供
SQL Server
(SQL Server数据库引擎服务)
支持主要服务和管理
主要作用
服务名称
2.企业管理器(Enterprise Manager)
SQL Server企业管理器是可视化的数据库管理工具,使用企业管理器可以对SQL Server服务器、数据库及数据库对象进行各种有效的管理,执行所有的SQL Server管理任务。
企业管理器采用了树型结构列表界面:
“控制台根目录”—〉“数据库服务器组”—〉“数据库服务器”—〉“数据库”—〉“数据库对象”(表、视图等)
3.查询分析器(SQL Query Analyzer)
SQL Server查询分析器用于SQL Server分析并执行T-SQL语句。用户以交互方式输入和执行T-SQL语句或由T-SQL语句构成的程序段或存储过程,可立即看到执行结果,从而实现对数据库的操作和管理。
有两种方法进入查询分析器:
(1)在企业管理器窗口中选择“工具/SQL查询分析器”菜单启动。
(2)从Windows“开始/程序”选择SQL Server程序组中启动。
注意:启动时首先出现数据库服务器连接对话框,在正确完成SQL Server的登录认证后才能启动查询分析器。
菜单栏
对象浏览器:进行数据库维护和操作
SQL语句编辑器
执行结果显示窗口
工具条
在SQL编辑窗口进行SQL语句或SQL语句段的编辑。
单击 按钮执行SQL语句。
单击 按钮或选择“文件/保存”命令将SQL编辑窗口中的脚本以SQL为扩展名保存起来。
单击 按钮或选择“文件/打开”命令可打开以SQL为扩展名的文本文件,打开以后,单击 即可执行其中的脚本。
在查询分析器中:
4.SQL Server联机丛书
SQL Server数据库创建和维护
1. 数据库中的对象
从逻辑上看,SQL Server数据库是由一组存储、管理和使用数据的对象构成。
数据库的对象:
表(Table)
索引(Index)
默认(Default)
约束(Constraint)
视图(View)
存储过程(Stored Procedure)
触发器(Trigger)
用户(User)、角色(Role)
用户定义的数据类型、用户定义的函数
SQL Server数据库
SQL Server有两类数据库:
(1)系统数据库:存放SQL Server工作时所需要的的系统级信息。
是一个临时数据库,它为SQL Server的查询、存储过程等的执行提供临时存储
tempdb
支持SQL Server Agent服务,它记录有关作业、警报、操作员等信息
msdb
是新建数据库的模板,包含了每个用户数据库都需要的一些系统表,SQL Server以它为基础创建新的数据库
model
从整体上控制SQL Server系统和用户数据库的运行。保存登录标识、系统配置、用户数据库基本信息等。该库非常重要,应设置权限禁止一般用户访问,另外要及时备份
master
主要作用
数据库
(2)用户自定义数据库:用户根据数据管理的需要建立的数据库,由用户自行创建和维护。
SQL Server提供两个样本数据库 :
pubs(图书出版的数据库)
Northwind(有关贸易公司的数据库)
(1) 文件:数据库文件可分为三类:
2.数据库的物理存储结构
指数据库文件在磁盘上的存储方式 。
主数据文件:用来存储数据以及数据库的启动信息。每个数据库都包含一个且只能包含一个主数据文件。主数据文件使用.MDF为扩展名。
次数据文件:用来存储不能置于主数据文件中的其他数据。次数据文件使用.NDF为扩展名。
事务日志文件:记录SQL Server执行的所有事务以及由这些事务操作引起的数据库的变化。 事务日志文件使用.LDF为扩展名。
每个数据库至少包含两个文件:主数据文件和事务日志文件。
(2) 文件组
文件组是用户对数据库文件(不包括事务日志文件)进行分组而形成的。
例如:将存储在两个不同驱动器上的数据库文件组成一个组对它们整体进行管理。
SQL Server提供了两种文件组类型:
用户自定义文件组:指在创建或更改数据库时,用户明确创建的任何文件组
主文件组:包含主数据文件和任何其它未放入其他文件组中的文件。所有系统表都包含在主文件组中。
(1) 每个数据库中都有一个文件组作为默认文件组运行。可以指定默认文件组,如果没有指定默认文件组,则主文件组是默认文件组。
说明:
(2) 若不指定用户定义文件组,则所有数据文件都包含在主文件组中。
(3) 一个文件只能是一个文件组的成员 。
数据库创建与维护
1.通过企业管理器创建数据库
【例4-1】创建数据库School
它包含主数据文件,其初始大小为5MB,事务日志文件,并将这两个文件建立在D:\DBSchool文件夹下(如果该文件夹不存在,需要先在我的电脑中创建,否则会报错),其他按照默认设置不变。
操作步骤如下:
(1)在企业管理器窗口右单击“数据库”或任一数据库名,从快捷菜单中选择“新建数据库”命令,将弹出 “数据库属性”对话框。
(2) 在常规选项卡的“名称”文本框中输入要创建的数据库名称“School”。
(3)选择“数据文件”选项卡,在“数据文件属性”页面中,修改数据库文件位置为D:\DBSchool及数据文件名 ,并修改初始文件大小5MB。
(4)选择“事务日志”选项卡,在“日志文件属性”页面中重新设置日志文件的位置为D:\DBSchool。
(5) 单击【确定】按钮,即创建了School数据库。
2.通过企业管理器修改数据库
数据库创建后,数据文件和日志文件名就不能改变了。
对已存在的数据库可以进行如下的修改:
增加或删除数据文件;
改变数据文件的大小和增长方式;
改变日志文件的大小和增长方式;
增加或删除日志文件;
增加或删除文件组。
操作步骤如下:
右单击需要修改的数据库,在快捷菜单中选择“属性”命令,弹出“数据库属性”界面。
通过“数据文件”选项卡:
可以修改已有数据文件的已分配空间、增长方式、最大大小等属性。
增加数据文件(增加的文件是次数据文件,扩展名是.NDF)
删除数据文件。
(2) 通过“文件组”选项卡:
增加文件组
删除文件组
注意:不能删除主文件组(PRIMARY)。可以删除用户定义的文件组,但必须首先删除该文件组中的所有文件。
3.在企业管理器中删除数据库
(1) 右单击要删除的数据库,在弹出的快捷菜单上选择“删除”命令。
(2) 在弹出的对话框中单击【确定】按钮,即可删除选定的数据库。
操作步骤如下:
新建一个数据库操作完成后,只是建立了数据库框架和相关的系统对象, 接下来的任务是建立具体的数据表 。
例如:建立如下教务管理系统的数据库。具体定义见教材P66页
数据表创建与维护
创建数据表的一般过程: ◆设计表结构
◆定义字段 输入字段 定义字段类型 定义字段属性
编辑字段 ◆保存表 ◆输入数据
1.SQL Server数据类型
l整型:整型数据类型用于存储整数,有4种整型分别用于存储不同范围的整数
1 个字节
0 ~ 255
tinyint
2 个字节
-215 ~ 215-1
smallint
4 个字节
-231 ~ 231-1
int
8 个字节
-263 ~ 263-1
bigint
占用存储空间
数据范围
数据类型
float和real是近似数值型,采用科学计数法表示数据。
decimal 和numeric是精确数值类型。两者的区别在于decimal不能应用于带有Identity的列。声明精确数值型数据的格式如下:
decimal |numeric(p[,s]),其中:p为精度,s为小数位数,s的默认值为0。
例如,表达所对应的数据精度的声明为decimal(5,2) 或numeric(5,2)
l浮点型:用于存储含小数的十进制数。
2~17 个字节
完整精度
-1038+1~1038-1
numeric
2~17 个字节
完整精度
-1038+1~1038-1
decimal
4 个字节
可精确到第7位小数
+38~+38
real
8 个字节
可精确到第15位小数
+308~+308
float
占用存储空间
精确度
数据范围
数据类型
l字符型和文本型
字符型:字符数据类型用于存储由字母、符号和数字组成的字符串。字符串常量要用单引号为起止界限,例如’9aC’。
变长,大于8KB
text
text
变长,最大8KB
varchar (n) ,n表示字符串可达到的最大长度1=<n <=8000
varchar
定长,最大8KB
char(n),n表示字符串的长度,1=<n <=8000
char
长度说明
定义格式
数据类型
char(n)是定长字符类型,字符串长度超出n的部分被截取;如不足n时,则在串的尾部添加空格以达到长度n。
varchar(n)是变长字符数据类型,长度为字符串的实际字符个数。 如varchar(50),当输入“Zhonghua”字符串时,其存储长度为8个字节。
通常,当某一字段的字符串长度固定或接近一固定值时使用char类型; 当字符串长度明显不一致时使用varchar类型。
Text是文本数据类型,用来存储可变长度的大量字符数据,其存储长度最多可达20亿个ASCII字符。
l日期时间数据类型
用来存储日期和时间数据,默认数据格式为:”YYYY-MM-DD HH:MM:SS”,例如:“2008-12-08 12:35:29”,在使用时也可只存储日期或时间。
l位类型
bit是位数据类型,用来作为逻辑变量使用,其数值有两种取值:0和1,分别代表TRUE和FALSE或YES和NO。例如在T_Student表中,字段LiveInDorm存储“是否住校”信息使用bit。
4个字节
1900年1月1日~2079年6月6日之间的日期时间
smalldatetime
8个字节
1753年1 月1日~9999年12月31日之间的日期时间
datetime
占用存储空间
数据范围
数据类型
l图像数据类型
image用于存储照片、图片等,实际存储的是可变长度的二进制数据,其长度最大可达231-1个字节。
l货币型
用十进制数表示货币值。实际上是一种小数,但小数点后只有4位,且自动四舍五入。
luniqueidentifier:唯一标识符类型
数据库管理系统会随着记录的加入自动为该类型的字段产生唯一标识符。它是16字节长的二进制数据。
4个字节
-214, ~214,,精度为4位小数
smallmoney
8个字节
-922,337,203,685, ~ +922,337,203,685,精度为4位小数
money
占用存储空间
数据范围
数据类型
2.数据表的创建和维护
(1) 创建数据表
【例4-3】在数据库School中建立学生表T_Student,完成各字段的定义。
1)在企业管理器中展开School数据库。右击数据库文件夹下的“表”项,从弹出的快捷菜单中选择“新建表”命令,弹出“表设计”界面。
2)在表设计界面,根据表的设计结构依次完成每个字段的名称和数据类型设置。
3)在输入完各表字段后,单击 按钮或关闭表设计窗口,出现“选择表名”对话框 ,输入表名“T_Student”,单击【确定】 , T_Student表就建立起来了。
图4-15 表设计界面
属性设置区,如字段描述、默认值、小数精度及位数等。
设计表中字段
(2) 修改数据表结构
增加字段、删除字段、修改字段属性等。
操作步骤:
1)在企业管理器中选择“表”对象,在右边窗格右击需要修改的表,在弹出的菜单上选择“设计表”命令,出现 “表设计”界面。
2)在数据表设计界面上,选中需要修改的一行,然后右击鼠标,弹出快捷菜单,可以对表设置主键、插入字段、删除字段。
3)对表的结构修改完毕后,单击关闭窗口按钮,出现保存表结构修改对话框,单击“是” 即可保存修改后的表。
(3)更改表名
操作步骤:
1)在企业管理器中展开表,右击要更改表名的表,在快捷菜单上选择“重命名”命令。
2)在表名位置输入新的表名 。
3.数据表的记录插入和维护
操作步骤:
在企业管理器中,展开需操作的表所在的数据库,在右窗格中右击需操作的数据表,在弹出的菜单中选择“打开表/返回所有行”,出现所选择表的数据窗口 。在该数据窗口中,可插入记录、修改记录和删除记录。
插入记录
1) 将光标定位在表尾的下一行,逐字段输入值,每输入一个字段值,按回车键。
2) 当一个记录最后一个字段输入完毕按回车键后,光标将自动转到下一行的第一个字段处,便可插入下一个记录。
3) 输完数据,单击“表数据”窗口的【关闭】按钮,添加的记录就保存到数据表中。
(2) 修改记录
定位被修改的记录字段,然后对该字段值进行编辑修改。
(3) 删除记录
1)在表数据窗口中定位需被删除的记录行,单击鼠标右键,在弹出的快捷菜单上选择“删除”命令。
2)弹出确认对话框,单击【是】按钮即删除选择的记录。
4.删除数据表
(1) 在企业管理器中展开表,右单击要删除的表,在快捷菜单上选择“删除”命令。
(2) 在弹出的“除去对象”对话框中,选择【除去】按钮,即可删除选择的表。
数据表约束和数据完整性控制
数据的完整性控制
指保护数据库中的数据的正确性、有效性和相容性,防止数据库中存在不符合语义的数据,防止错误信息进入数据库,并且使数据符合所描述的业务规则。
SQL Server使用表约束实现数据库完整性控制的方法:通过限制表的字段、记录以及表之间的数据来保证数据完整性。
表4-10 SQL Server数据常用完整性约束机制
通过表间关系约束字段值的有效性
外关键字(Foreign Key)
参照
完整性
限定某一列中可接受的值或数据格式
检查约束(Check)
限定某一列必须有值,即不允许空值
非空值约束(Not Null)
对没有插入值的列自动添加表定义时对该列设置的默认值
默认值约束(Default)
域完整性
保证在非关键字字段不出现重复值
唯一性约束(Unique)
保证表中记录行的唯一性
主关键字约束(Primary Key)
实体
完整性
作用
约束
完整性
【例4-4】在数据库School中定义学生表T_Student的主键为“StudentCode”。
【例4-5】在数据库School中的学生表T_Student不允许出现姓名相同的记录,即对“StudentName”字段定义唯一性约束。
实体完整性
主关键字约束(Primary Key)
唯一性约束(Unique)
主关键字(简称主键)是表中能保证表中记录唯一性的一个或多个字段的组合。主键的值不能重复,且不能为空。一个表只能有一个主键。
唯一性约束可保证非主键列不输入重复值。
对非主键字段或字段的组合强制唯一性。
对允许空值的字段强制唯一性。
实体完整性主要体现在表中记录的唯一性。
域完整性
默认值约束(Default)
非空值约束(Not Null)
检查约束(Check)
默认值约束使用户能够定义一个值,每当用户没有在某一列中输入值时,则系统将所定义的值提供给这一列。
记录中的每一列均必须有值,即使它是空(NULL)。
CHECK 约束限制某一列中可接受的值或格式。
域完整性主要体现在表中字段(或称列或域)的值的有效性。
【例4-6】在数据库School的学生表T_Student中,设置性别Sex字段的默认值为“男”。
【例4-7】在数据库School的学生表T_Student中,设置StudentCode、StudentName、ClassCode、Sex字段为非空值,其他字段允许为空。
【例4-8】在数据库School的学生表T_Student中,设置Sex列的值只允许是“男”或“女”。
参照完整性 :
外关键字(Foreign Key)
参照完整性主要体现在通过表间关系约束字段(或称列或域)的值的有效性。
两个建立关联关系的表中,在主表中相关字段定义了主键或唯一性约束,在从表中将相关字段定义为外关键字(简称外键),这样,外键的取值必须是主键中存在的值或空值。
【例4-9】在数据库School的学生表T_Student和T_Class表间建立关系,实施参照完整性约束。在该关系中,将T_Class的ClassCode字段设置为主键,将T_Student 的ClassCode设置为外键,并实施参照完整性。
索引的创建与维护
索引提供数据表查询时快速查找支持。一般来说,需要在下面这些地方建立索引:
l 在主键和外键上创建索引。
l 在检索频繁的字段上建立索引。
l 在经常需要排序的字段上建立索引。
SQL Server自动为主键字段建立聚集索引,又称为主索引,其他索引用户根据需要建立等。
可在数据表上建立一个或多个索引。
索引的创建
【例4-12】使用企业管理器为School数据库的T_Student表建立索引,按学号(StudentCode)建立主键索引;按姓名(StudentName)建立非唯一索引,索引的组织方式为非聚集索引。
操作步骤如下:
1)打开School数据库,右击T_Student表进入T_Student表设计器界面,如果已经设置主键,则主索引自动建立;如果没有设置主键,选择主键字段“StudentCode”,然后单击 图标设置主键。
2) 右击T_Student表设计器的某一字段行,出现快捷菜单,选择“索引/键”命令,进入“属性”页 。
3) 在“索引/键”属性页界面选择“新建”命令,系统将自动创建新索引的名称 ,用户可在索引名文本框中输入自己定义的索引名,在列名下拉列表中选择要创建索引的字段,在顺序下拉列表中选择索引字段的排序方式,然后关闭“属性”界面,索引即创建好了。
4.索引管理
索引管理包括索引的查看、修改和删除。
1) 进入企业管理器,打开相应的数据库,右击要进行索引管理的数据表,从弹出的快捷菜单中选择“所有任务/管理索引”命令,出现“管理索引”对话框。
2) 选择要查看或修改的索引,单击“管理索引”对话框上的【编辑】按钮,显示“编辑”索引对话框,在该对话框中,可以修改被选索引的设置。
3) 要删除索引,则在“管理索引”对话框或索引“属性”页界面上选择要删除的索引,单击【删除】按钮,即可删除索引。
图4-30 “管理索引”对话框
图4-31 “编辑索引”对话框
实验一 SQL Server数据库基本操作
教材P272~275:建立Book数据库
了解Microsoft SQL Server 2000中各组件的主要功能和基本使用方法;
了解SQL Server数据库的逻辑结构和物理结构;
了解数据表的结构特点以及索引的基本概念。通过本实验,
在“企业管理器”中创建和修改数据库和数据表结构;
对数据表进行数据的添加、删除和更新操作;
在数据表上创建字段索引。
新建一个数据库关系图Diagram1,显示Book数据库所有表的表间关系。
注意:
1.先建立所有表结构和表的约束,最后再输入数据。
2.每个表只需要输入2~3条记录即可。
3.注意数据库存放位置。
4. 需要首先将数据库分离,然后才能复制数据库到其他地
方;下次使用数据库时要先附件。操作步骤见下页。
附加和分离数据库
在复制数据库前数据库必须脱离SQL Server,只能实现脱机复制。
【例4-77】将School数据库分离,然后将数据库文件复制为,再附加数据库。
1)分离数据库:在“数据库”文件夹找到School数据库,右击选择“所有任务/分离数据库”菜单。 在“分离数据库”对话框中,当数据库状态显示“该数据库状态已就绪,可以分离”时,单击【确定】按钮。
2)复制数据库文件:利用Windows操作系统的“我的电脑”的文件复制功能将数据库文件文件复制为 。
3)附加数据库:右击“数据库”,选择“所有任务/附加数据库”菜单。
验证指定的数据库文件是否正确
列出了数据库中的所有文件
列出了文件的名称和路径
选择要附加的数据库文件名。
输入数据库的名称