QL Server 2014是微软公司推出的最新数据库管理系统, 安装容易, 功能强大, 操作方便, 界面友好, 比以往的任何一个版本都要好用。本书编写团队在多年教学与软件项目开发的基础上, 根据程序员和数据库管理员的岗位要求以及高职院校特点组织教材内容, 按照“设计数据库、建立数据库、管理数据库、应用数据库”的逻辑顺序, 以图书借阅管理系统和成绩管理系统为教学主线, 系统介绍了运用SQL Server 2014进行数据库管理的各种操作以及软件开发所需的各种知识和技能, 主要内容包括: 数据库技术导论, 数据库操作, 表操作, 数据查询, 视图操作, 索引操作, 存储过程, 触发器, TSQL编程, 数据库备份与恢复, 数据库安全操作, VS 2010+SQL Server 2014数据库应用软件开发。
按照“设计数据库、建立数据库、管理数据库、应用数据库”的逻辑顺序,以图书借阅管理系统和成绩管理系统为主线,系统介绍了运用SQL Server 2014进行数据库管理的各种操作以及软件开发所需的各种知识和技能,主要内容包括:数据库技术导论,数据库操作,表操作,数据查询,视图操作,索引操作,存储过程,触发器,T-SQL编程,数据库备份与恢复,数据库安全操作,VS2010+SQL Server2014数据库应用软件开发。
如何由入门者快速达到职业岗位要求,是每一个老师也是每一个学生梦寐以求的事情,以精辟的语言教育人、以精巧的例题引导人、以精彩的项目启发人,正是作者长期追求的目标。本书编写团队融长期的教学经验与多年的软件开发经验于一体,以行业最新数据库管理系统SQLServer2014为例,根据数据库管理员(DBA)的岗位要求以及高职院校的特点,按照“设计数据库、建立数据库、管理数据库、应用数据库”的顺序,以图书借阅管理系统和成绩管理系统为教学主线,系统介绍了数据库应用技术及数据库软件开发的知识和技能,是理论、实践、应用开发三者完美结合的一体化教材。
全书从逻辑上可以分为4个部分:数据库基础理论、SQLServer2014数据库应用、技能训练、数据库应用软件开发,其中技能训练穿插在每一个章节中,可以在每一次理论讲授后,马上进行技能训练。内容包括12章:第1章是数据库技术导论,第2章是建立数据库,第3章是建立表,第4章是数据查询,第5章是建立视图,第6章是建立索引,第7章是存储过程,第8章是触发器,第9章是TSQL编程,第10章是数据库备份与恢复,第11章是数据库安全管理,第12章是VS2010+SQLServer2014数据库应用软件开发,包括教学管理系统和图书信息管理系统两个项目的分析与实现。
本教材的主要特点是:
(1)面向数据库管理员(DBA)和程序员职业岗位,以图书馆管理系统项目为教学主线,以成绩管理系统项目为技能训练主线,贯穿每一章节,并在最后一章实现了这两个项目,好教好学。
(2)本书共12章教学内容,15个技能训练,34课时操作内容,实现了理论与实践的课时比例1∶1,从理论到实践融会贯通。
(3)将知识讲解、技术应用、技能训练、项目开发集成于一体,是数据库管理员和程序员工作任务的缩影。
(4)根据内容多少及难易程度的不同,每一章均安排了一两次技能训练,最后是教学项目与实践项目的开发过程,从新手到高手不再是难事。
(5)语言通俗易懂,讲解深入浅出,让读者迅速上手,逐步建立数据库管理的思想,完美实现由学习者到职业人的本质提升。
本教材由长沙商贸旅游职业技术学院的胡伏湘教授和肖玉朝副教授任主编,最后由胡伏湘统稿。在编写过程中,得到了湖南工程职业技术学院的徐刚强教授、湖南科技职业学院的成奋华教授、湖南外贸职业学院的高述涛教授、湖南安全职业技术学院的夏旭副教授、湖南信息职业技术学院的余国清副教授、清华大学出版社卢先和副社长和闫红梅老师的大力支持,并参考了大量的文献资料,书中未能详尽罗列,在此表示真心感谢!
本教材所有的例题和命令及程序均在SQLServer2014中文版环境中运行通过,所有案例的脚本同样适用于SQLServer2008版和SQLServer2016版。本书提供配套教学资源,包括电子教案、命令脚本及相应素材。
由于编者水平有限,书中不足之处在所难免,恳求读者和各位老师指正,作者不胜感激。
编者(hfx_888@163.com)
2017年3月于长沙
第1章数据库技术导论
1.1数据库职业岗位技能需求分析
1.2案例数据库说明
1.2.1图书馆管理系统教学案例
1.2.2学生成绩管理系统scoresys数据库说明
1.3技能训练1: 了解数据库工作岗位
1.3.1训练目的
1.3.2训练时间
1.3.3训练内容
1.3.4思考题
1.4数据库技术概述
1.4.1数据库技术的发展历程
1.4.2数据库系统的基本概念
1.5三种主要的数据模型
1.5.1网状模型
1.5.2层次模型
1.5.3关系模型
1.5.4非结构化数据模型
1.6SQL Server 2014数据库基础
1.6.1SQL Server 2014的主要功能
1.6.2SQL Server 2014的6个版本
1.7SQL Server 2014的简单使用
1.7.1启动SQL Server Management Studio
1.7.2SQL Server Management Studio基本组成
1.7.3SQL Server Management Studio中执行查询
1.8技能训练2: 用管理器窗口建立数据库和表
1.8.1训练目的
1.8.2训练时间
1.8.3训练内容
1.8.4思考题
习题1
第2章建立数据库
2.1SQL Server 2014数据库的组成
2.1.1SQL Server 2014的体系结构
2.1.2SQL Server 2014的数据库组成
2.1.3SQL Server服务器身份验证模式
2.1.4文件与文件组
2.2创建数据库
2.2.1用管理器菜单方式建立数据库
2.2.2用SQL命令方式建立数据库
2.3修改数据库
2.3.1用管理器菜单方式修改数据库
2.3.2用SQL命令修改数据库
2.4管理数据库
2.4.1删除数据库
2.4.2查看数据库
2.4.3分离数据库
2.4.4附加数据库
2.4.5为数据库创建脚本
2.5技能训练3: 建立数据库
2.5.1训练目的
2.5.2训练时间
2.5.3训练内容
2.5.4思考题
习题2
第3章建立表
3.1SQL Server 2014的主要数据类型
3.1.1SQL Server 2014的数据类型
3.1.2字符型
3.1.3整数型
3.1.4精确实数型
3.1.5近似实数型
3.1.6货币型
3.1.7日期时间型
3.1.8文本型
3.1.9二进制型
3.1.10特殊数据类型
3.2创建表结构
3.2.1用管理器菜单方式建立数据库
3.2.2标识列
3.2.3用CREATE TABLE命令建立数据库
3.2.4表的完整性约束
3.3技能训练4: 建立表结构
3.3.1训练目的
3.3.2训练时间
3.3.3训练内容
3.3.4思考题
3.4修改数据库结构
3.4.1用管理器窗口修改
3.4.2用SQL命令修改
3.5记录的输入与修改
3.5.1用管理器窗口输入记录
3.5.2用SQL命令输入记录
3.5.3用SQL命令修改记录
3.5.4删除记录
3.5.5删除表
3.6技能训练5: 记录处理
3.6.1训练目的
3.6.2训练时间
3.6.3训练内容
3.6.4思考题
习题3
第4章数据查询
4.1SELECT查询语句
4.1.1SQL语言
4.1.2SELECT语句
4.1.3运算符
4.2单表查询
4.2.1列名的使用
4.2.2用WHERE子句查询特定的记录
4.2.3用ORDER BY子句对查询结果排序
4.2.4聚合函数
4.2.5用GROUP BY子句对查询结果分组
4.3技能训练6: 单表查询
4.3.1训练目的
4.3.2训练时间
4.3.3训练内容
4.3.4思考题
4.4多表连接查询
4.4.1多表连接方法
4.4.2多表连接查询
4.5技能训练7: 多表连接查询
4.5.1训练目的
4.5.2训练时间
4.5.3训练内容
4.5.4思考题
4.6子查询
4.6.1用子查询实现数据查询
4.6.2利用SQL命令建立新的表
4.7技能训练8: 子查询
4.7.1训练目的
4.7.2训练时间
4.7.3训练内容
4.7.4思考题
习题4
第5章建立视图
5.1视图概述
5.1.1视图的功能
5.1.2视图的分类
5.2建立视图
5.2.1用SSMS管理器窗口建立视图
5.2.2用命令建立视图
5.2.3查看视图的代码
5.2.4删除视图
5.3视图的应用
5.3.1通过视图添加表数据
5.3.2更新记录中的数据
5.3.3删除记录中的数据
5.4技能训练9: 视图的建立与管理
5.4.1训练目的
5.4.2训练时间
5.4.3训练内容
5.4.4思考题
习题5
第6章建立索引
6.1索引概述
6.1.1索引的功能
6.1.2索引的分类
6.2索引的建立
6.2.1用SSMS管理器窗口建立索引
6.2.2用命令建立索引
6.3索引的管理
6.3.1用命令管理索引
6.3.2索引的维护
6.3.3重建索引
6.3.4更新统计信息
6.4技能训练10: 索引的建立与管理
6.4.1训练目的
6.4.2训练时间
6.4.3训练内容
6.4.4思考题
习题6
第7章存储过程
7.1存储过程的功能与分类
7.1.1存储过程的功能
7.1.2存储过程的分类
7.2存储过程的建立
7.2.1建立存储过程
7.2.2建立无参存储过程
7.2.3存储过程的调用
7.2.4建立带输入参数的存储过程
7.2.5建立带输入和输出参数的存储过程
7.3存储过程的管理
7.3.1用SSMS管理器窗口执行存储过程
7.3.2修改存储过程
7.3.3存储过程脚本的查看
7.3.4存储过程的综合应用
7.4技能训练11: 存储过程的建立与调用
7.4.1训练目的
7.4.2训练时间
7.4.3训练内容
7.4.4思考题
习题7
第8章触发器
8.1触发器的功能与分类
8.1.1触发器的功能
8.1.2触发器的分类
8.1.3与触发器相关的两个表
8.2触发器的建立
8.2.1建立触发器
8.2.2触发器应用
8.2.3触发器的综合应用
8.2.4INSTEAD OF触发器
8.3触发器的管理
8.3.1修改触发器
8.3.2删除触发器
8.3.3查看触发器
8.3.4触发器的禁用和启用
8.4技能训练12: 触发器的建立与使用
8.4.1训练目的
8.4.2训练时间
8.4.3训练内容
8.4.4思考题
习题8
第9章TSQL编程
9.1TSQL语法基础
9.1.1标识符
9.1.2变量
9.1.3数学运算符
9.1.4字符串连接运算符
9.2系统函数
9.2.1CASE函数
9.2.2NULL值处理函数
9.2.3系统信息函数
9.2.4DATENAME日期函数
9.2.5字符串处理函数
9.2.6数值处理函数
9.3流程控制语句
9.3.1顺序结构
9.3.2选择结构
9.3.3循环结构
9.3.4WAITFOR语句
9.4技能训练13: 数据库编程
9.4.1训练目的
9.4.2训练时间
9.4.3训练内容
9.4.4思考题
习题9
第10章数据库备份与还原
10.1数据库备份与恢复概述
10.1.1备份和恢复需求分析
10.1.2备份概述
10.1.3备份的类型
10.1.4还原的类型
10.2数据库备份
10.2.1用SSMS管理器备份
10.2.2用命令备份数据库
10.2.3用命令实现事务日志备份
10.2.4删除备份设备
10.3数据库还原
10.3.1还原数据库的任务
10.3.2用SSMS还原数据库
10.3.3用命令还原数据库
10.3.4数据库的导出
10.4技能训练14: 数据库备份与还原
10.4.1训练目的
10.4.2训练时间
10.4.3训练内容
10.4.4思考题
习题10
第11章数据库安全管理
11.1数据库安全概述
11.1.1SQL Server数据库安全等级
11.1.2登录模式
11.2管理登录名
11.2.1用SSMS创建登录名
11.2.2用命令创建登录名
11.2.3维护登录名
11.3管理用户
11.3.1使用SSMS管理用户
11.3.2用命令建立用户
11.3.3维护用户
11.4管理角色
11.4.1固定数据库角色
11.4.2用户自定义数据库角色
11.4.3应用程序角色
11.5管理权限
11.5.1权限的分类
11.5.2对象权限
11.5.3语句权限
11.6技能训练15: 数据库安全管理
11.6.1训练目的
11.6.2训练时间
11.6.3训练内容
11.6.4思考题
习题11
第12章SQL Server数据库程序开发
12.1数据库应用程序结构
12.1.1C/S(客户端/服务器端)结构
12.1.2B/S(浏览器端/服务器端)结构
12.1.3三层(或N层)结构
12.1.4数据库访问技术
12.2ADO.NET数据库访问技术
12.2.1ADO.NET技术
12.2.2ADO.NET数据库操作对象
12.3使用C#.NET开发SQL Server数据库程序
12.3.1项目任务描述
12.3.2数据库设计
12.3.3前台页面设计
12.4使用ASP.NET开发SQL Server数据库程序
12.4.1项目任务描述
12.4.2数据库设计
12.4.3在web.config文件中配置数据连接
12.4.4图书分类信息添加、修改、删除与查询功能的实现
12.4.5用户登录与图书管理模块功能的实现
12.5技能训练16: 用VS+SQL Server开发图书管理系统
12.5.1训练目的
12.5.2训练时间
12.5.3训练内容
12.5.4思考题
习题12
附录各章参考答案
参考文献
第3章建立表
SQLServer2014的主要数据类型;
运用SSMS创建和管理表(包括结构和记录);
数据完整性及实现方法;
表的修改与维护。
掌握SQLServer2014常用的数据类型及用法,能够利用SSMS管理器窗口方式和SQL命令方式创建表、修改表、删除表,能够对记录进行维护操作,掌握数据完整性的意义和用命令实现数据完整性的方法。
3.1SQLServer2014的主要数据类型
数据表简称表,是数据库的最主要组成成分,数据库建好以后,里面没有任何内容,是个空架子。通过在数据库中添加表,数据库中才会有内容。表由若干栏目(即列或者字段)和若干行组成,每一行称为一条记录。每个栏目均需要设置其名称(即列名、字段名)、数据类型、长度、约束,列名必须符合标识符的要求,数据类型由系统规定,长度是一个整数,表示这个列最大可以输入多少个字符,而约束是对这个列的值设置的限制条件,如性别只能为“男”或者“女”。所有列全部加起来组成表结构,即表头,因此表就是由结构和记录两部分组成的。
建立表时,必须先建立结构,然后才能添加记录,没有记录的表称为空表。
3.1.1SQLServer2014的数据类型
数据类型表达的功能是当前列的值是什么类型的,比如年龄必须是正整数、成绩肯定是数值、姓名一定是字符型、生日是日期型数据等,因此建立表时,决定各个列的数据类型的唯一依据是这个列的所有可能取值。
SQLServer2014定义了35种标准数据类型,用户也可以自己定义数据类型,但用得很少,一般是使用标准数据类型。部分数据类型的长度是固定的(如int、date),不允许改变,有些数据类型的长度是可以设置的(如char)。
虽然系统支持的数据类型很多,但一些数据类型极少使用,常用的数据类型只有十多种。
3.1.2字符型
字符数据类型包括char、varchar、nchar、nvarchar型,其默认长度都是50,这些数据类型用于存储字符数据。字符型数据指由字母、数字和其他特殊符号(如标点、$,#,@)、汉字构成的字符串,赋值时要用单引号‘’引起来,如表31所示。
表31字符类型
数据类型
格式
描述
存储空间
char
char(n)
n为1~8000字符之间
n字节
varchar
varchar(n)
n为1~8000字符之间
实际字符数
nchar
nchar(n)
n为1~4000个Unicode字符
2*n字节
nvarchar(n)
nvarchar(n)
最多为230-1个Unicode字符
2*字符数+2字节额外开销
varchar和char类型的主要区别是数据填充后,实际占用的长度不同,如果有个列名Name的数据类型为varchar(20),其值为Brian,5个字符,物理上只存储5个字节,但如果数据类型为char(20),将使用全部20个字节,因为SQLServer会自动补充15个空格来填满20个字符。一般原则是:值小于或等于5个字节的列采用char比较合理,如果超过10个字符,使用varchar更有利于节省空间。
nvarchar和nchar的工作方式与对应的varchar数据类型和char数据类型相同,但这两种数据类型都可以处理国际性的Unicode通用字符,它们需要一些额外开销,以Unicode形式存储的数据为一个字符占两个字节。如果要将值Brian存储到nvarchar列,要占用10个字节;而如果将它存储为nchar(20),就需要使用40个字节。
3.1.3整数型
整数型简称整型,可用于存储精确的整数,包括bigint(大整型)、int(普通整型)、smallint(小整型)和tinyint(微型整型)、bit(位)5种类型,它们的区别在于表示数据的范围不同,如表32所示。
表32整数型
数据类型
描述
存储空间
bit
0、1或null
1字节(8位)
tinyint
0~255之间的整数
1字节
smallint
-32768~32767之间的整数
2字节
int
-231~231-1之间的整数
4字节
bigint
-263~263-1之间的整数
8字节
在建表时,整型数据通常用int表示。
3.1.4精确实数型
表示能够精确存储的实数值,由总长度和小数位数构成,总位数不得小于小数位数。包括以下两种。
decimal(n,m):十进制型,格式是decimal(n,m),n表示总长度,m表示小数位数。如:decimal(10,5),表示总长度是10位,其中小数位数是5位,整数位数也是5位,小数点不占位数。
numeric:数值型,其用法与decimal相同,如numeric(10)表示长度是10位,不允许有小数,实际上就是整数,而numeric(10,5)表示最多5位小数,5位整数。
3.1.5近似实数型
近似实数型数据可以存储的精度不是很高,但数据的取值范围却又非常大的数据,其长度是固定的,用户不可以改变,可以用普通方法和科学记数法表示。包括以下两种。
real:实数,可以表示的数值范围是-3.40E+38~-1.18E-38,0,1.18E-38~3.40E+38。
float:浮点数,可以表示的数值范围是-1.79E+308~-2.23E-308,0,2.23E-308~1.79E+308,在计算机中,1234.3456用科学记数法表示为:1.234456e3,即1.2343456*103,也可以写成12.343456e2,5.67E-5表示5.67×10-5,e可以用大写,也可以用小写。
3.1.6货币型
货币型实际上就是近似实数型的特殊情况,允许在数值前面加上货币符号$,表示金额,通常用于财务部门,其长度是固定的。如$13.4,$9.5E8,货币型也包括两种,区别是能表示的数字范围不同。
money:长度为8字节,如$326779.1234,精确到万分之一。
smallmoney:长度为4字节,如$23.333,3.51e8,$3.51e8。
3.1.7日期时间型
在SQLServer中日期时间型表示日期或者时间,其值要以字符串的形式表示,即要用单引号括起来,包括4种类型。
(1)date:日期型。范围是1753.1.1~9999.12.31。日期分隔符可以是“/”或“”,格式可以是MM/DD/YYYY,也可以是MMDDYYYY,MM表示两位月,DD表示两位日,YYYY表示四位年,日期还可以表示为YYYY/MM/DD格式(欧洲格式)。
日期可以只精确到月,系统自动填写为当月的1日。
(2)time:时间型。格式为hh:mm:ssAM/PM,AM表示上午,PM表示下午,默认是上午,既可以采用12小时制,也可以采用24小时制,通常用24小时制表示更加方便,不容易出错。
时间可以只精确到分钟,系统自动补充到0秒。
(3)datetime:日期和时间的结合体。范围为1753.1.1的0时~9999.12.31的23:59:59。格式是MM/DD/YYYYhh:mm:ssAM/PM,时间分隔符是冒号“:”,日期与时间之间用空格分开。可以只要日期,也可以只要时间,也可以是日期和时间组合使用。
例:2016101511:20表示2016年10月15日上午11点20分。
(4)smalldatetime:小日期时间型。能够表示的范围是:1900.1.1~2079.6.6,其他要求同datetime。
3.1.8文本型
文本型数据类型主要是用于存储超大长度的文本内容,即用char、varchar、nchar、nvarchar四种类型还不足以表示的大数据,文本型数据类型的长度是固定的,用户不可以修改,包括以下两种类型。
text:字符型,用来存储大量的非统一编码型字符数据,最多可以有231-1或20亿个字符。
nchar:统一编码字符型,用来存储定长统一编码字符型数据。统一编码用双字节结构来存储每个字符,因此相比普通的字符类型数据,它占用的存储容量要大一倍,其最大容量为230-1字节。
当然,也可以用文本型存储较少的字符内容,但处理起来不如字符型方便,占用了更多的空间。一般像简历、奖励情况、发言稿这样的字段可以考虑使用文本型。
3.1.9二进制型
二进制数据类型用于存储二进制数据,包括binary、varbinary、image三种类型。
binary:二进制数据类型,存储最长8000字节长的定长的二进制数据,用户可以设置长度。如果其长度设为n,则其存储的大小是n+4个字节。当表中各条记录这个列的内容接近相同的长度时,使用这种数据类型比较合理。
varbinary:可变长二进制数据类型,用来存储最长8000字节的二进制数据,用户可以设置长度。当各条记录此列的内容长短不一,变化较大时,使用这种数据类型有利于节省存储空间。
image:图像型,用来存储变长的二进制数据,最大可达231-1或大约20亿字节,类似于照片、头像、证书等这样的字段可以采用image类型,支持JPG、TIFF、PNG、GIF等格式。
值得注意的是,SQLServer并不能直接读出二进制文件和图像型文件,也就是说,不能直接在表中输入二进制数据和图像型数据,也不可能显示出来,因此它们的内容通常为NULL(空),需要由软件开发工具如Java、C#等语言进行赋值并显示内容。如某表包括5个列和数据类型是:编号char(10)、姓名char(8)、工作简历text、照片image、代表作binary(7000)、学历证书varbinary(1000),其记录情况如图31所示。
图31例表
3.1.10特殊数据类型
timestamp:时间戳类型,相当于一个单向递增的计数器,表示SQLServer活动的先后顺序,Timestamp数据与插入数据的日期和时间并没有关系。当所定义的列在更新或插入新行时,此列值自动更新并自动填写。如果表中列名为Timestamp,系统自动设置为Timestamp类型。
uniqueidentifier:唯一标识型类型,长度为16,是根据网卡地址和CPU时钟产生,通过函数newid()获得,全球各地机器产生的此值都不同,但用户可以修改。当表的记录行要求唯一时,用uniqueidentifier类型最实用。例如,“客户标识”列用这种类型可以区别不同的客户。
3.2创建表结构
表是数据库中最基本的组成成分,一个完整的表包括表的结构和记录,表的结构由全部列、列的约束、列与列之间的相互约束三部分组成。创建表有两种方法:一种是用SSMS管理器的菜单方式,另一种是用命令方式,其用途更广泛。
3.2.1用管理器菜单方式建立数据库
例31利用管理器窗口给libsys数据库添加读者信息表ReaderInfo,列的组成如表33所示,各列的含义参见表14,除主键约束和非空约束外,其他约束暂不设置。