《程序逻辑和C语言实现》教案.docx
《《程序逻辑和C语言实现》教案.docx》由会员分享,可在线阅读,更多相关《《程序逻辑和C语言实现》教案.docx(17页珍藏版)》请在冰点文库上搜索。
《程序逻辑和C语言实现》教案
第四章SQLServer数据库表管理
(2)
1.回顾上一章:
[10分钟]……………………………………………………………………….2
2.课程知识点讲解:
……………………………………………………………………….2
2.1.T-SQL语句回顾:
[10分钟]2
2.2.使用SQL语句创建和删除数据库:
[20分钟]3
2.2.1.创建数据库3
2.2.2.删除数据库4
2.3.使用SQL语句创建和删除表[20分钟]5
2.3.1.创建表5
2.3.2.删除表6
2.4.使用SQL语句创建和删除约束:
[20分钟]6
2.5.掌握创建安全帐户的SQL语句:
[30分钟]7
3.本章总结[10分钟]………………………………………………………………………..9
4.考核点…………………………………………………………………………………………9
5.测试题…………………………………………………………………………………………9
6.扩展部分常见编程错误…………………………………………………………………10
7.学生问题汇总……………………………………………………………………………10
8.作业………………………………………………………………………………………..10
授课教师:
课时:
90分钟
●本章主要目标
⏹掌握建库的SQL语句
⏹掌握建表的SQL语句
⏹掌握加约束的SQL语句
⏹掌握创建安全帐户的SQL语句
●本章重点
⏹掌握建库的SQL语句
⏹掌握建表的SQL语句
⏹掌握加约束的SQL语句
●本章难点
⏹创建安全帐户的SQL语句
1.回顾上一章:
[10分钟]
●数据完整性的相关分类:
实体完整性、引用完整性、域完整性和自定义完整性。
●使用企业管理器创建表的注意事项(命名字段名、类型、实施完整性约束)
●当我们建立的表没有相关的主键时,我们可以使用标识列来唯一条记录
●数据的转换服务(DTS)
2.课程知识点讲解:
2.1.T-SQL语句回顾:
[10分钟]
老师提问:
问题1:
数据库文件的组成?
注意:
-1-主数据文件(*.mdf)
包含数据库的启动信息、存储数据有且只有一个
-2-次要文件(*.ndf)
存储数据
-3-日志文件(*.ldf)
用于恢复数据库的日志信息
2:
数据库的其他属性
-1-文件存放位置
-2-文件增长设置
-3-文件容量设置
强调:
文件容量设置最好不要选择增长不受限制,因为当数据量很大时会占满整个文件所在的磁盘。
3:
数据操纵语言的增加删除查询修改的sql语法?
过渡
思考:
当项目经测试基本满足客户的需求后,需要部署在客户的实际环境中试运行,我们在部署前需要考虑的是,后台的数据库如何移植到客户的计算机中?
解答:
考虑各种数据库版本的兼容性,行之有效的办法就是编写比较通用的SQL语句,编写完毕后,存入*.sql文件中,最后复制到客户的计算机中执行,从而实现后台数据库的移植。
所以我们还需要掌握如何使用SQL语句,实现建库、建表、加约束和创建登录帐户等。
2.2.使用SQL语句创建和删除数据库:
[20分钟]
老师提问:
数据库和表的关系是什么?
我们为什么要建库?
2.2.1.创建数据库
Ø语法:
CREATEDATABASE数据库名
ON[PRIMARY]
(<数据文件参数>[,…n][<文件组参数>])
[LOGON]
(<日志文件参数>[,…n])
Ø文件的具体参数语法:
([NAME=逻辑文件名,]
FILENAME=物理文件名
[,SIZE=大小]
[,MAXSIZE={最大容量|UNLIMITED}]
[,FILEGROWTH=增长量])[,…n]
其中,[]表示可选部分,{}表示需要的部分。
演示1:
一个数据文件和一个日志文件
CREATEDATABASE数据库名
ONPRIMARY--默认就属于PRIMARY主文件组,可省略
(/*数据文件的具体描述*/
NAME=’stuDB_data’,--主数据文件的逻辑名
FILENAME=’D:
\file\stuDB_data.mdf’,--主数据文件的物理名
SIZE=5mb,--主数据文件的初始大小
MAXSIZE=100mb,--主数据文件增长的最大值
FILEGROWTH=15%--主数据文件增长的增长率)
[LOGON]
(/*日志文件的具体描述,各参数含义同上*/
NAME=’stuDB_log’,
FILENAME=’D:
\file\stuDB_log.ldf’,
SIZE=2mb,
FILEGROWTH=1mb)
GO--和后续的SQL语句分隔开
演示2:
多个数据文件和多个日志文件
删除数据库
老师提问
问题1:
如果SQLServer中已存在stuDB数据库,再次运行建库语句,可能会怎么样?
演示→报错
解答:
建库之前,先检测是否存在stuDB数据库,如有,就删除它,然后重新建。
2:
如何检测是否存在stuDB数据库?
解答:
新建的数据库都在系统数据库master的表sysdatabases中。
只需查看该表的name列即可。
Ø删除数据库语法:
DROPDATABASE数据库名
USEmaster--设置当前数据库为master,以便访问sysdatabases表
GO
IFEXISTS(SELECT*FROMsysdatabasesWHEREname='stuDB')
DROPDATABASEstuDB
CREATEDATABASEstuDB
ON(…..)
LOGON
(…)
GO
演示:
2.3.使用SQL语句创建和删除表[20分钟]
Ø回顾
1、建表的步骤:
确定表中有哪些列
确定每列的数据类型
给表添加各种约束
创建各表之间的关系
2、数据类型
2.3.1.创建表
Ø语法
CREATETABLE表名
(字段1数据类型列的特征,
字段2数据类型列的特征,
...
)
演示1:
创建学生信息表stuInfo
USEstuDB--将当前数据库设置为stuDB
GO
CREATETABLEstuInfo/*-创建学生信息表-*/
(
stuNameVARCHAR(20)NOTNULL,--非空(必填)
stuNoCHAR(6)NOTNULL,--学号,非空(必填)
stuAgeINTNOTNULL,--年龄,INT类型默认为4个字节
stuIDNUMERIC(18,0),--身份证号,NUMERIC(18,0)代表18位数字,小数位数为0
stuSeatSMALLINTIDENTITY(1,1),--座位号,自动编号,从1开始递增
stuAddressTEXT--住址,允许为空,即可选输入
)
GO
演示2:
创建学生信息表stuMarks
CREATETABLEstuMarks
(
ExamNoCHAR(7)NOTNULL,--考号
stuNoCHAR(6)NOTNULL,--学号
writtenExamINTNOTNULL,--笔试成绩
LabExamINTNOTNULL--机试成绩
)
老师提问:
问题1:
如果当前数据库中已存在stuInfo表,再次创建出错如何解决?
解答:
先检测是否存在该表,如有,就删除它,然后重新建。
2:
如何检测是否存在stuInfo表?
解答:
在stuDB数据库的系统表sysobjects(对象表)中检查name列即可
2.3.2.删除表
Ø语法
DROPTABLE表名
USEstuDB--将当前数据库设置为stuDB,以便在stuDB数据库中建表
GO
IFEXISTS(SELECT*FROMsysobjectsWHEREname=’stuInfo’)
DROPTABLEstuInfo
演示
2.4.使用SQL语句创建和删除约束:
[20分钟]
Ø回顾
1、约束的目的:
确保表中数据的完整性
2、常用的约束类型
主键约束(PrimaryKeyConstraint)
唯一约束(UniqueConstraint)
检查约束(CheckConstraint)
默认约束(DefaultConstraint)
外键约束(ForeignKeyConstraint)
3、约束名的取名规则:
约束类型_约束字段
Ø添加约束的语法
ALTERTABLE表名
ADDCONSTRAINT约束名约束类型具体的约束说明
演示:
给学员信息表stuInfo添加约束
主键(PrimaryKey)约束:
如PK_stuNo
唯一(UniqueKey)约束:
如UQ_stuID
默认(DefaultKey)约束:
如DF_stuAddress
检查(CheckKey)约束:
如CK_stuAge
外键(ForeignKey)约束:
如FK_stuNo
----添加主键约束(stuNo作为主键)
ALTERTABLEstuInfo
ADDCONSTRAINTPK_stuNoPRIMARYKEY(stuNo)
----添加唯一约束(身份证号唯一)
ALTERTABLEstuInfo
ADDCONSTRAINTUQ_stuIDUNIQUE(stuID)
----添加默认约束(如果地址不填,默认为“地址不详”)
ALTERTABLEstuInfo
ADDCONSTRAINTDF_stuAddress
DEFAULT('地址不详')FORstuAddress
----添加检查约束(要求年龄只能在15~40之间)
ALTERTABLEstuInfo
ADDCONSTRAINTCK_stuAge
CHECK(stuAgeBETWEEN15AND40)
----添加外键约束(主表stuInfo和从表stuMarks建立关系,关联字段为stuNo)
ALTERTABLEstuMarks
ADDCONSTRAINTFK_stuNo
FOREIGNKEY(stuNo)REFERENCESstuInfo(stuNo)
GO
Ø删除约束的语法
ALTERTABLE表名
DROPCONSTRAINT约束名
演示:
删除stuInfo表中地址默认约束的语句
ALTERTABLEstuInfo
DROPCONSTRAINTDF_stuAddress
2.5.掌握创建安全帐户的SQL语句:
[30分钟]
Ø回顾SQLServer的3层安全模式
类比(小区的3层验证关口)门卫→单元楼→自己房间
第一关:
登录到SQLServer系统(相当于小区门卫),即需要登录帐户;
第二关:
访问某个数据库(相当于我们的单元楼),即需要成为该数据库的用户
第三关:
访问数据库中的表(相当于打开自己的房间),即需要数据库管理员DBA授权
Ø创建登陆帐户
登录帐户相应有两种:
SQL帐户和Windows帐户
-1-添加Windows登录帐户
EXECsp_grantlogin‘training\S26301’--域名\用户名
-2-添加SQL登录帐户
EXECsp_addlogin‘zhangsan’,‘1234’--用户名,密码
--域名\用户名
Ø创建数据库用户
调用系统存储过程sp_grantdbaccess,其用法为
EXECsp_grantdbaccess‘登录帐户’,’数据库用户’
其中,“数据库用户“为可选参数,默认为登录帐户
/*--在stuDB数据库中添加两个用户--*/
USEstuDB
GO
EXECsp_grantdbaccess
'training\S26301','S26301DBUser'
EXECsp_grantdbaccess
'zhangsan','zhangsanDBUser'
系统内置的数据库用户dboguest
Ø向数据库用户授权
授权的语法为:
GRANT权限[ON表名]TO数据库用户
USEstuDB
GO
/*--为zhangsanDBUser分配对表stuInfo的select,insert,update权限--*/
GRANTselect,insert,update
ONstuInfoTOzhangsanDBUser
/*--为S26301DBUser分配建表的权限--*/
GRANTcreatetableTOS26301DBUser
分别在查询分析器中演示,并在企业查询分析器察看效果
3.本章总结[10分钟]
●数据库的物理实现一般包括:
Ø创建数据库
Ø创建表
Ø添加各种约束
Ø创建数据库的登录帐户并授权
●创建数据库或表时一般需要预先检测是否存在该对象
Ø指数据库从master系统数据库的sysdatabases表中查询
Ø表从该数据库的系统表sysobjects表中查询
●访问SQLServer某个数据库中的某个表,需要三层验证:
Ø是否是SQLServer的登录帐户
Ø是否是该数据库的用户
Ø是否有足够的权限访问该表
4.考核点
考核点1:
数据库的物理实现
考核点2:
三层验证
5.测试题
建立一学生数据库用来存放学生的相关信息,包括学生的基本信息和考试情况。
(要求全部使用T-SQL来实现,操作环境为SQL查询分析器)
(1)建库:
建立数据库stuDB,要求保存在D:
\file目录下,文件增长率为15%
(2)建表
学生基本信息表stuInfo
字段名称
数据类型
说明
stuName
字符
学生姓名,该栏必填,要考虑姓氏可能是两个字的,如欧阳
stuNo
字符
学号,该栏必填,学号不能重复,且必须是s253**格式
stuSex
字符
学生姓名,该栏必填,且只能是男/女
stuAge
数字
学生年龄,该栏必填,必须在15~40之间
stuSeat
数字
学生定座的座位号,该栏必填,采用自动编号方式,且必须是1~30号
stuAddress
文本
学生地址,该栏可不填,如没有填写,显示地址不详
(3)添加约束:
根据上述表中的说明字段,修改表,添加约束。
(4)向表中插入测试的数据,并查询测试,测试数据如表
学生基本信息表stuInfo
stuName
stuNo
stuSex
stuAge
stuSeat
stuAddress
张三
s25301
男
18
1
北京海淀
李四
s25303
女
22
2
河南洛阳
王五
s25302
男
31
3
钱六
s25304
男
28
4
江苏扬州
(5)添加SQL帐户
班主任:
帐号是banzhuren,密码是111111,能访问stuInfo,用来填写和修改学生档案
(6)测试权限
6.扩展部分常见编程错误
∙扩展部分1:
设置约束还有其他实现方法
∙常见错误2:
数据库编码标准
7.学生问题汇总
∙学生问题1:
在建表时就制定约束,可以吗?
当约束比较简单时可以,一般推荐将表的结构和约束分开
∙学生问题2:
数据库用户和登录帐户到底有什么区别?
登录帐户是用于登录到SQLServer的凭证,好比进入小区的大门;而数据库用户对应的是每个单元楼门口的钥匙。
也就是说如果用户希望进入多个单元,则需要多个单元搂的钥匙。
8.作业
习题1:
①下面()存储过程用于添加一个数据库安全帐户并授予它访问权限。
A.sp_grantdbacessB.sp_grantlogin
C.sp_grantuserD.sp_grantall
②成功登录到SQLServer后,就可以访问任意数据库了,这种说法()。
A.错误B.正确
③创建数据库时,需要指定()属性。
A.数据库初始大小(size)B.数据库的存放位置
C.数据库的物理名和逻辑名D.数据库的访问权限
④创建图书馆借阅表时,“归还日期”默认为当天,且必须晚于“借出日期”,应采用()约束。
A.检查约束B.默认约束
C.主键约束D.外键约束
⑤某个字段希望存放电话号码,该字段应选用()数据类型。
A.char(10)B.varchar(13)
C.textD.int
⑥在SQLServer中,删除数据库使用()语句。
A.REMOVEB.DELETE
C.ALERTD.DROP