一.课程任务概述
简要陈述介绍本实践课程的各项任务要求。
1.1 实验一(数据库定义与基本操作)任务要求:
(1) 熟练掌握 SQL 的数据定义语句 CREATE、ALTER、DROP、Select
(2) 写出实验报告
1.2 实验二(SQL 的复杂操作)任务要求:
(1) 熟练掌握 SQL 的连接查询语句
(2) 熟练掌握 SQL 的嵌套查询语句
(3) 掌握表名前缀、别名前缀的用法
(4) 掌握不相关子查询和相关子查询的区别和用法
(5) 掌握不同查询之间的等价替换方法(一题多解)及限制
(6) 熟练掌握 SQL 的数据更新语句 INSERT、UPDATE、DELETE
(7) 记录实验结果,认真完成实验报告
1.3 实验三(SQL 的高级实验)任务要求:
(1) 掌握视图的定义与操作
(2) 掌握对触发器的定义
(3) 掌握对存储过程的定义
(4) 掌握如何对用户进行授权和收回权限
(5) 掌握用户定义完整性的方法
(6) 写出实验报告
1.4 实验四(数据库设计)任务要求:
熟练掌握使用 SQL 语句设计数据库的方法,实现前述实验的学生管理系 统,完成实验报告。
二.实验任务
实验任务一 数据库定义与基本操作
2.1 任务要求
本次实验需要熟练掌握SQL的数据定义语句CREATE、ALTER、DROP和SELECT。同时对DBMS的数据定义功能、SQL语言的数据定义功能、DBMS数据单表查询功能和SQL语言的数据单表查询语句进行熟练掌握。
2.2 完成过程
2.2.1 创建数据库
在SqlServer中,我们使用点击databases右键新建数据库,如图:
建立成功之后,我们利用select语句判断数据库是否创建成功,如图:
2.2.2创建基本表
Sqlserver创建基本表有两种方式,一种是通过在选定的数据库之下进行右键选择表进行创建,也可以使用命令语句进行创建,如图(以创建表Student为例):
创建和修改表的定义如图:
2.2.3实验建立数据库S_T,表Student、Course和SC
实验所创建的表Student、Course和SC,如图:
对表中的数据我们可以使用insert进行插入赋值,如图:
2.2.4 查找数据
1.SELECT语句的基本用法,如图:
2.使用WHERE 子句进行有条件的查询,查找成绩大于等于90,课程号为2的学生姓名学号。如图:
3.in,between:查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别,如图1-12:
4.利用 LIKE 子句实现模糊查询查询所有姓刘学生的姓名、学号和性别。如图:
5.利用 ORDER 子句为结果排序查询选修了 3 号课程的学生的学号及其成绩,查询结果按分数降序排列。如图:
6.计算 1 号课程的学生平均成绩。如图:
7.GR0UP BY 子句实现分组查询的方法查询选修了 3 门以上课程的学生学号。如图:
2.2.5扩展练习
1.查询全体学生的学号、姓名和年龄;如图:
2.查询所有计算机系学生的详细记录;如图:
3.找出考试成绩为优秀(90 分及以上)或不及格的学生的学号、课程号及成绩; 如图1-19:
4.查询年龄不在 19~20 岁之间的学生姓名、性别和年龄;:如图:
5.查询数学系(MA)、信息系(IS)的学生的姓名和所在系;如图:
6.查询名称中包含“数据”的所有课程的课程号、课程名及其学分;如图:
7.找出所有没有选修课成绩的学生学号和课程号;如图:
8.查询学生 200215121 选修课的最高分、最低分以及平均成绩;如图:
9.查询选修了 2 号课程的学生的学号及其成绩,查询结果按成绩升序排列;如图:
10.查询每个系名及其学生的平均年龄。如图:
思考题:查询学生平均年龄在 19 岁以下(含 19 岁)的系别及其学生的平均年龄。如图:
3.任务总结
实验一中我们主要是对数据库基本的几个重要的关键字进行熟练地使用。
在安装好SQLserver之后,我一开始并不是使用命令语句进行创建表和填入数据,而是右键进行编辑填入实验数据,在填入数据的过程中我发现刚开始时一直进行报错,后来分析得到数据选项应该选择allow null,并且可能会出现数据长度选择较短的情况,一开始很着急,最后慢慢熟悉sqlserver之后,学会了怎么使用命令去解决这些问题,而不是把表删除了进行重建。
最后通过一些实例学会了SELECT,INSERT,GROUP BY等关键字的使用。
实验任务二 SQL的复杂操作
3.1 任务要求
掌握 SQL 语言的数据多表查询语句和更新操作。
- 熟练掌握 SQL 的连接查询语句
- 熟练掌握 SQL 的嵌套查询语句
- 掌握表名前缀、别名前缀的用法
- 掌握不相关子查询和相关子查询的区别和用法
- 掌握不同查询之间的等价替换方法(一题多解)及限制
- 熟练掌握 SQL 的数据更新语句 INSERT、UPDATE、DELETE
3.2 完成过程
3.2.1连接查询
1.等值连接查询与自然连接查询:查询每个学生及其选修课的情况;查询每个学生及其选修课的情况(去掉重复列)。如图:
2.自身连接查询:查询每一门课的间接先修课。如图:
3.外连接查询:查询每个学生及其选修课的情况(要求输出所有学生--含未选修课程的学生的情况),如图:
4.复合条件连接查询:查询选修了 2 号课程而且成绩在 90 以上的所有学生的学号和姓名;查询每个学生的学号、姓名、选修的课程名及成绩。如图:
5.嵌套查询(带有 IN 谓词的子查询):查询与“刘晨”在同一个系学习的学生的学号、姓名和所在系。五种解法,如图:
6.嵌套查询(带有比较运算符的子查询):找出每个学生超过他所选修课程平均成绩的课程号。如图:
7.嵌套查询(带有ANY或ALL 谓词的子查询):查询其他系中比计算机系某个学生年龄小的学生的姓名和年龄。如图:
8.嵌套查询(带有 EXISTS 谓词的子查询) 例如:查询所有选修了 1 号课程的学生姓名。如图:
9.集合查询:查询计算机系的学生以及年龄不大于 19 岁的的学生。如图:
10.update 语句用于对表进行更新:将信息系所有学生的年龄增加 1 岁。如图:
11.delete 语句用于对表进行删除:删除学号为 95019 的学生记录。如图:
12.insert 语句用于对表进行插入:插入一条选课记录( '95020','1 ')。如图:
3.2.2扩展练习
1.查询每门课程及其被选情况(输出所有课程中每门课的课程号、课程名称、选修该课程的学生 学号及成绩--如果没有学生选择该课,则相应的学生学号及成绩为空值)。如图:
2.查询与“张立”同岁的学生的学号、姓名和年龄。(要求使用至少 3 种方法求解) 如图:
3.查询选修了 3 号课程而且成绩为良好(80~89 分)的所有学生的学号和姓名。 如图:
4.查询学生 200215122 选修的课程号、课程名 (思考:如何查询学生 200215122 选修的课程号、课程名及成绩?)如图:
5.找出每个学生低于他所选修课程平均成绩 5 分以上的课程号。(输出学号和课程号) 如图:
6.查询比所有男生年龄都小的女生的学号、姓名和年龄。如图:
7.查询所有选修了 2 号课程的学生姓名及所在系。 如图:
8.使用 update 语句把成绩为良的学生的年龄增加 2 岁,并查询出来。如图:
9.使用 insert 语句增加两门课程:C语言和人工智能,并查询出来,如图:
10.使用 delete 语句把人工智能课程删除,并查询出来。如图2-29:
3.3任务总结
实验二相较于实验一而言,无疑是对于关键字和数据库语句的进一步提高和运用,我在开始插入数据后再对数据库进行操作的过程中,出现了很多数据重复的情况,后来发现是自己的语句输入出现了问题,本次实验主要在这方面花费了较多时间。
实验任务三 SQL的高级实验
4.1 任务要求
掌握 SQL 语言的视图、触发器、存储过程、安全等功能
- 掌握视图的定义与操作
- 掌握对触发器的定义
- 掌握对存储过程的定义
- 掌握如何对用户进行授权和收回权限
- 掌握用户定义完整性的方法
4.2 完成过程
1.创建CS系的视图CS_View 如图:
2.在视图 CS_View 上查询CS 系选修了 1 号课程的学生,如图:
3.创建 IS 系成绩大于 80 的学生的视图 IS_View,如图:
4.在视图 IS_View查询 IS 系成绩大于 80 的学生,如图:
5.删除视图 IS_View,如图:
6.利用可视化窗口创建 2 个不同的用户U1 和U2,如图3-8;利用系统管理员给U1 授予 Student 表的如图3-9,、3-10、3-11; 查询和更新的权限,给U2 对 SC 表授予插入的权限。然后用U1 登录,如图3-12,分别 1)查询学生表的信息,如图3-13;2)把所有学生的年龄增加 1 岁,然后查询,如图-13;3)删除 IS 系的学生,如图3-14;4)查询CS 系 的选课信息,如图3-15。用U2 登录,分别 1)在 SC表中插入 1 条记录(‘200215122’,‘1’,75);2) 查询 SC表的信息,3)查询视图 CS_View 的信息。如图:
对于U2的操作,同U1。
使用U2登录,
7.用系统管理员登录,收回U1 的所有权限
8.用U1 登录,查询学生表的信息 如图:
9.用系统管理员登录
10.对 SC表建立一个更新触发器,当更新了 SC 表的成绩时,如果更新后的成绩大于等于 95,则检查该成绩的学生是否有奖学金,如果奖学金是“否”,则修改为“是”。如果修改后的 成绩小于 95,则检查该学生的其他成绩是不是有大于 95 的,如果都没有,且修改前的成绩 是大于 95 时,则把其奖学金修改为”否”。然后进行成绩修改,并进行验证是否触发器正确 执行。1)首先把某个学生成绩修改为 98,查询其奖学金。2)再把刚才的成绩修改为 80, 再查询其奖学金。 如图:
11.删除刚定义的触发器 如图:
12.定义一个存储过程计算CS 系的课程的平均成绩和最高成绩,在查询分析器或查询编 辑器中执行存储过程,查看结果。 如图3-21:
13.定义一个带学号为参数的查看某个学号的所有课程的成绩,查询结果要包含学生姓 名。进行验证。 如图:
14.把上一题改成函数。再进行验证。如图:
15.在 SC 表上定义一个完整性约束,要求成绩再 0-100 之间。定义约束前,先把某个学 生的成绩修改成 120,进行查询,再修改回来。定义约束后,再把该学生成绩修改为 120,然后进行查询。如图:
4.3任务总结
本次实验在第(6)问的时候由于在database和数据库外都有一个安全性的选项,因此在创建用户的时候,一开始自己选错了选项,导致进入的页框完全不一样,以及自己在建立好用户之后,在交换登录用户的过程中出现了一些选项的问题。最后查询了很久时候终于解决。
实验任务四 数据库设计
5.1 任务要求
熟练掌握使用 SQL 语句设计数据库的方法,实现前述实验的学生管理系统,完成实验报告。
5.2 完成过程
5.2.1 连接MySQL
1.首先创建一个项目用作连接,然后编辑属性,将原MySQL的include和lib文件导入到相关目录之下,如图:
2.然后将libmysql.lib导入到linker下的输入当中,同时将libmysql.dll复制到该项目的目录文件夹之下,如图:
3.完成上述操作后,运行代码进行连接,连接成功如图:
5.2.2 实战练习
5.2.2.1 新生入学信息增加,学生信息修改。
进行学生信息增加操作,运行结果如图:
MySQL中的数据变化信息如图:
对学生信息进行修改,如图:
5.2.2.2 课程信息维护(增加新课程,修改课程信息,删除没有选课的课程信息)。 运行结果如图:
修改课程信息如图:
删除课程操作,由于不存在没有人选的课程,如图:
5.2.2.3录入学生成绩,修改学生成绩。
录入学生成绩如图:
修改成绩后结果如图:
5.2.2.4按系统计学生的平均成绩、最好成绩、最差成绩、优秀率、不及格人数。
运行结果如图:
5.2.2.5按系对学生成绩进行排名,同时显示出学生、课程和成绩信息。
运行结果如图:
5.2.2.6输入学号,显示该学生的基本信息和选课信息。
运行结果如图:
5.3任务总结
本实验在配置环境的过程花费了很多的时间,以及最后在运行的过程中出现的报错情况无从下手,最后查询之后是一个dll没有放在项目的文件夹之下,但是本次实验是一个真正意义上的实战。
课程分析思考
6.1 数据库安全技术以及国产数据库在实际应用中情况分析和未来展望
1.数据库安全技术
数据库安全技术与其他的安全领域方面的安全技术相比又有其独特的地方,但是数据库也和其他的安全风险一样,不法分子都是通过网络攻击技术进行渗透、窃取用户的信息,我们可以结合数据库安全和网络安全多个方面结合进行考虑,从而研究更加有效的安全技术。
保证物理数据库的安全无疑是最基础也是最直接的保护,我们为了保证数据库的安全性,不妨可以使第三安全方进行介入。例如大型可靠的安全公司,作为该领域的研究造诣者,他们往往会有着更加系统的防御方案和面对攻击的丰富经验。同时我们也要从自身的角度较强防范,比如将数据库安排在更加高级的“安全锁”之中。
我们也可以保证数据库服务器的独立性。将自己数据库与网上的其他各种各样的服务器进行隔离,减少数据库面临的风险和危险,防止数据库直接暴露在攻击之下,SIEM就可以提供相关的服务。
当然数据库安全技术还包括HTTPS代理服务器、加密协议等等技术。
1.国产数据库在实际应用中情况分析和未来展望
由于国产数据库相较于西方国家起步较晚,发展很迅速但是还不算成熟。主要可以总结为自主研发、引源、云数据和未来可期几个特点。
在数据库技术引入到中国之后,我国的数据库就发展迅速,例如关系数据库的发展,国内的数据库企业与国外相比,具有成本较低的优势。
虽然我国目前数据库是自主研发的,但是存在着生态环境差、产品稳定性差等情况,我们还需更加努力跳出这种尴尬处境。而对于求学若渴的我国来看,国际市场上是具有相关的数据库的源代码进行售卖的,我国也保持引源的态度进行学习和提升,但是这也容易导致我国严重依赖的恶性循环。云上技术对于独立的商家而言,将自己的产品发布到云品台上供更多的用户查看和购买无疑是符合商家的利益的,但是我国目前仍然没有解决技术上的硬伤,因此在云数据的领域我国也是出于被动的状况。
但是就目前的形式来看,随着我国对数据库的投入逐年增加,在数据库方面的自主研发成果也层出不穷,我们应该冲破技术圈套,在未来让我们的数据库技术引领别人。
6.2 数据库开发中团队协作分析
在数据库的开发之中,分析无疑会影响到整个数据库的成果和趋势,因此数据库团队分析协作能力是一个重中之重。
数据库分析会是一个复杂、耗费时间的必经之路。但是良好的团队协作会大大的降低时间成本。而且在一个团队当中,每个人擅长的领域不同,学习的专业和只是略有不同,为了实现共赢,最好的情况就是明确分工,比如数据的输入流、数据加工等等。好好利用收集的的数据,保证数据安全环境的条件下发挥个人所长,从而使得团队的效率更高,同时在团队中,每个人都会产生忧患意识,实现良性竞争,分工会将一个大任务分而治之,在此过程中的每一个人都是受益者,同时每个人的能力也会慢慢地提升。
因此数据库团队中的每个成员应该各抒所长,分而治之,在良性忧患意识中竞争,使个人能力逐步提升,团队越走越远。
6.3 数据库的未来发展趋势
随着互联网的极速发展,云数据的流行等现代化元素,数据库也会逐步深度数字化发展,实现多层多维齐发展,从单价到楼房到全球,数据库也会形成多维的极其细致的网络将我们进行覆盖,会覆盖到几乎我们生活中的方方面面,同时在时间上也会大大缩短,和人们生活的节奏一样会越来越快。
同时任何一个数据就是一个节点,每个节点之间互相关联,每个数据的背后都有着一个数据模型,充斥着这个神奇的世界。
随着AI的发展,数据的计算和存储等也会越来越智能化,数据的解决方式越来越多样化,例如通过云平台。
数据库的成本也会越来越低,存储数据的方式会越来越多,安全性防护也会越来越完善。会出现一个数据中心支柱,集中数据资源,使得数据的成本和花费的时间越来越合理化。
面对未来的数据库,将会朝着数字化、安全完善化、成本更合理化的方向发展,让我们一起憧憬数据库的美好大厦!
课程总结
对于这四次实验我想分别总结一下。
在实验一中,我个人遇到的最大的困难就是对SqlServer的熟悉使用,一开始并不知道如何对数据表中的数据进行修改(除了用命令),在查阅了一些文章之后熟悉了对SqlServer的了解,和对数据库的实际的表格的了解,这对于后面的实验有很大的帮助。
在实验二中,主要是学习数据库中的各种关键字语句,以及一个目的可以使用的很多不同的解法达到实验目的,很新颖。
实验三就相对于前两个实验稍微复杂一点,尤其是第(6)问的时候,一开始有点不知所措,最后在同学的帮助下和自己的查阅之下终于完成了对用户的创建和登录,以及后面的切换用户的操作。
实验四是我花费时间最长的实验,一开始使用的是sqlserver进行实验,最后换成了mysql,对vs进行环境的配置时也出现了问题,在运行的最后关头,系统报出了scanf的相关错误,最后在开头处添加了一条#define语句终于将问题解决,但是这个实战真的很有趣。
综上四个实验,这是对数据库实际软件的熟悉,对数据库中的语句和关键词的强化,以及面对实际的需求的实现,用C语言连接数据库等知识的综合!
附录
参考文献:
《数据库系统概论》
《MySQL》
《SQL数据库教程》
参考文章:
- https://blog.csdn.net/lwj8819/article/details/122384726?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167223158016800213055379%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=167223158016800213055379&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~pc_rank_34-1-122384726-null-null.142^v68^pc_new_rank,201^v4^add_ask,213^v2^t3_esquery_v1&utm_term=scanf%3A%20This%20function%20or%20variable%20may%20be%20unsafe.%20Consider%20using%20scanf_s%20instead.%20To%20disable%20deprecation%2C%20use%20_CRT_SECURE_NO_WARNINGS.%20See%20online%20help%20for%20details.%09TFTP%09D%3A%5CVS2022%20Fi&spm=1018.2226.3001.4187
- https://so.csdn.net/so/search?q=%27scanf%27%3A%20This%20function%20or%20variable%20may%20be%20unsafe.%20Consider%20using%20scanf_s%20instead.%20To%20disable%20deprecation,%20use%20_CRT_SECURE_NO_WARNINGS.%20See%20online%20help%20for%20details.%09TFTP%09D%3A%5CVS2022%20Fi&t=&u=&urw=
- https://blog.csdn.net/Zhongtongyi/article/details/105031058?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%8D%8E%E7%A7%91%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%9E%E9%AA%8Cmysql&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-2-105031058.142^v68^pc_new_rank,201^v4^add_ask,213^v2^t3_esquery_v1&spm=1018.2226.3001.4187 etc.