210153 廖小均之欧阳家百创编

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据库实验报告
欧阳家百(2021.03.07)
姓名:廖小均
班级:0141202
学号:2012210153
学院:通信与信息工程学院
实验四SQL数据查询语言DQL
一.实验目的:
数据查询语言指对数据库中的数据查询、统计、分组、排序等操作。

查询语句可以分为简单查询、连接查询、嵌套查询和组合查询等。

本次实验了解SQL语言的SELECT语句对数据的查询,学会在Navicat for MySQL中用SELECT语句对表中的数据进行简单查询、连接查询、嵌套查询和组合查询。

二.仪器设备及用具:
硬件:投影仪、每位同学分配已连接校园网PC机一台。

软件:本机已安装MySQL 5.5
三.实验步骤及代码:
1.启动Navicat for MySQL,在MySQL –新建连接中完成连接参数配置。

2.登录到本地数据库服务器后,连接到test数据库上。

3.用Create Table建立Student表
create table student
( SNO varchar(20),
Name varchar (10),
Age integer,
College varchar(30))
4.用Create Table建立Course表
create table Course
(CourseID VARCHAR(15),
CourseName varchar(30),
CourseBeforeID VARCHAR(15))
5.用Create Table建立Choose表
CREATE TABLE Choose
(SNO VARCHAR(20),
CourseID varchar(30),
Score DECIMAL (5,2))
6.用INSERT语句向Student表中插入3个元组:
注意:每条元组一个完整的INSERT语句,3个元组需要写3个INSERT语句
insert into student(SNO,Name,Age,College)values ('S00001','张三',20,'计算机学院');
insert into student(SNO,Name,Age,College)values ('S00002','李四',19,'通信学院');
insert into student(SNO,Name,Age,College)values ('S00003','王五',21,'计算机学院');
7.用INSERT语句向Course表中插入3个元组:
注意:每条元组一个完整的INSERT语句,3个元组需要写3个INSERT语句。

insert into Course(CourseID,CourseName,CourseBeforeID)VALUES('c1','计算机导论 ','NULL');
insert into Course(CourseID,CourseName,CourseBeforeID)VALUES('c2','c语言','c1');
insert into Course(CourseID,CourseName,CourseBeforeID)VALUES('c3','数据结构','c2');
8.用INSERT语句向Choose表中插入7个元组:
注意:每条元组一个完整的INSERT语句,7个元组需要写7个INSERT语句。

insert into Choose(SNO,CourseID,Score) values ('S00001','c1',95); insert into Choose(SNO,CourseID,Score) values ('S00001','c2',80); insert into Choose(SNO,CourseID,Score) values ('S00001','c3',84); insert into Choose(SNO,CourseID,Score) values ('S00002','c1',80); insert into Choose(SNO,CourseID,Score) values ('S00002','c2',85); insert into Choose(SNO,CourseID,Score) values ('S00003','c1',78);
insert into Choose(SNO,CourseID,Score) values ('S00003','c3',70);
9.用SELECT语句,查询计算机学院学生的学号和姓名。

select SNO,Name from student where College='计算机学院';
10.用SELECT语句的between…and…表示查询条件,查询年龄在20~23岁的学生信息。

select*from student where Age between 20 and 23;
11.用SELECT语句的COUNT()聚集函数,统计Student表中学生总人数。

select count(*) from student;
12.分别用SELECT语句的max()、min()、sum()、avg()四个聚集函数,计算Choose表中C1课程的最高分、最低分、总分、平均分。

select max(Score)from choose where CourseID='C1';
select min(Score)from choose where CourseID='C1';
select sum(Score)from choose where CourseID='C1';
select avg(Score)from choose where CourseID='C1';
13.用SELECT语句对空值(NULL)的判断条件,查询Course表中先修课称编号为空值的课程编号和课程名称。

select CourseID,CourseName from Course where CourseBeforeID='NULL';
14.用SELECT语句的连接查询,查询学生的学号、姓名、选修的课程名及成绩。

SELECT student.Sno,student.`Name`,choose.CourseID,choose.Score
from student,choose WHERE student.Sno=choose.Sno
15.用SELECT的存在量词EXISTS,查询与“张三”在同一个学院学习的学生信息。

select sno,name,college from student A
Where exists(select college from student B
Where =`张三`and a.college and !=`张三`);
16.用SELECT语句的嵌套查询,查询选修C1课程的成绩低于“张三”的学生的学号和成绩。

代码:SELECT Sno,Score FROM choose where choose.CourseID='C1' AND choose.Score<(
SELECT Score from student,choose
WHERE student.Sno=choose.Sno and student.`Name`='张三' and choose.CourseID='C1')
结果:
17.用SELECT语句的组合查询(UNION),查询选修了C1课程或者选修了C3课程的学生学号。

代码:
SELECT Sno,CourseID FROM choose WHERE CourseID='C1' UNION
SELECT Sno,CourseID from choose where CourseID='C3'
结果:
18.用SELECT语句的组合查询(UNION)与DISTINCT短语,查询选修了C1课程或者选修了C3课程的学生学号,并取消重复数
据。

代码:SELECT DISTINCT Sno FROM choose WHERE CourseID='C1'
UNION
SELECT DISTINCT Sno from choose where CourseID='C3'
结果:
四.实验总结:
1、Where与Having语句有何差别?
答:区别在于作用对象不同。

Where子句基本表或者视图,从中选择满足条件的元组。

Having短语作用于组,从中选择满足条件的组。

2、Count(*)与Count(字段名)有何差别?
答:Count(*)统计元组个数,Count(字段名)统计一列中的数值
3、LIKE ‘[^s][^y][^s]%’与NOT LIKE ‘sys%’有无区别?请加以验证?
答:有区别
4、全连接、左连接、右连接有什么不同?
答:若全连接则左右表中的所有记录都会被选出来
若左连接则选出左边表的所有记录和右边表中没有和它匹配
的纪录
若右连接则选出右边表的所有记录和左边表中没有和他匹配
的值
5、IN与Exists语句有何区别?
答:
6、不相关子查询、相关子查询有何区别?
答:不相关子查询的条件不依赖与父查寻而相关子查询的条件依赖于父查寻。

求解相关子查询不像求解不相关子查询那样,一次将子查询求解出来,然后去求解父查寻。

内层查询与外层查询有关,因此必须反复求值
7、UNION与UNION ALL有何差别,谁的性能高?
答:UNION和UNION ALL的区别在于UNION将多个查询的结果合并起来时,系统将会自动去掉重复的元组而union all则保留重复的元组。

UNION ALL的性能更高,因为UNION要删除重复的元组。

实验六MySql的存储过程
一、实验目的
存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。

存储过程分为两类:1.系统提供的存储过程;2.用户自定义存储过程。

存储过程具有的优点:1.存储过程允许标准组件式编程;2.存储过程能够实现较快的执行速度;3.存储过程能够减少网络流量;4.存储过程可被作为一种安全机制来充分利用。

存储过程是可复用的组件!想象一下如果你改变了主机的语言,这对存储过程不会产生影响,因为它是数据库逻辑而不是应用程序。

存储过程是可以
移植的!
本次实验了解MySQL存储过程的创建、修改和删除的方法和步骤,掌握在Navicat for MySQL中对存储过程的进行创建、修改和删除,掌握在MySQL Command Line Client中调用带参数和不带参数的存储过程。

二、实验要求
1、实验前:预习实验内容,学习相关知识。

2、实验中:按照实验内容要求进行实验,实验时注意每种SQL语句的基本命令及各个关键字的含义,做好实验记录。

3、实验后:分析实验结果,总结实验知识,得出结论,按格式写出实验报告。

4、在整个实验过程中,要独立思考、独立按时完成实验任务,不懂的要虚心向教师或同学请教。

5、要求按指定格式书写实验报告,且报告中应反映出对上次试验报告总结
三.实验步骤
1.启动Navicatfor MySQL,在MySQL –新建连接中完成连接参数配置。

CREATE DATABASE db5536;
USE db5536;
2.登录到本地数据库服务器后,连接到db5536数据库上。

CREATE TABLE cqupt (s1 INTEGER);
INSERT INTO cqupt VALUES (5);
3.执行五、教学过程中(三)实验内容的1部分的(2)、(3)步骤创建及调用不带参数的存储过程,验证不带参数的存储过程的创建和调用方法。

CREATE procedure first_p()
SELECT'Hello MySQL,This is my first procedure'
//
CREATE procedure second_p()
SELECT current_date from cqupt
//
Call first_p()//
Call second_p()//
4.在步骤3的基础上,创建存储过程third_p(),显示表cqupt中的数据,并对其进行调用测试。

结果如图所示:
CREATE procedure third_p()
SELECT * from cqupt//
5.执行五、教学过程中(三)实验内容的第2部分创建及调用带参数的存储过程,验证带参数的存储过程的创建和调用方法。

CREATE PROCEDURE simpleproc (OUT paraml INT)
SELECT COUNT(*) INTO paraml FROM cqupt
//
CREATE PROCEDURE simpleprocl (IN paraml INT)
SET @x = paraml -100
//
CALL simpleproc(@a)//
Select @a//
CALL simpleprocl(5500)//
SELECT @x//
6.在步骤5的基础上,创建存储过程simpleproc2(),对传入参数进行乘以10的处理,变量定义@x,并对其进行调用测试。

结果如图所示:
CREATE PROCEDURE simpleprocl (IN paraml INT)
SET @x = paraml * 10
//
CALL simpleprocl2(50)//
SELECT @x//
7.用Drop Procedure语句删除存储过程first_p。

如图所示:DROP PROCEDURE first_p//
四.实验总结:
1、如何修改存储过程?
答:1)用DROP PROC PROC_A
2)ALTER PROC PROC_A:
ALTER PROC[EDURE]
Procedure_name[;number]
[{@parameter data_typ}[yarying][=default][output]][,..n]
3)用CREATE OR REPLACE PROCEDURE PROC_A;
2、如果雇员数据重复插入,如何修改存储过程来正确显示结果?答:ALTER PROC PROC_A;
ALTER PROC[EDURE]
Procedure_name[;nnumber]
[{@parameter data_typ}[yarying][=default][output]][,..n]
实验七触发器
一、实验目的
触发器是特定事件出现的时候,自动执行代码块类似于存储过程。

触发器是特定事件出现的时候,自动执行代码块类似于存储过程。

触发器是特定事件出现的时候,自动执行代码块类似于存储过程。

触发器与存储过程的区别在于:是由用户或应序显式调器与存储过程的区别在于:是由用户或应序显式调器与存储过程的区别在于:是由用户或应序显式调器与存储过程的区别在于:是由用户或应序显式调器与存储过程的区别在于:是由用户或应序显式调器与存储过程的区别在于:是由用户或应序显式调器与存储过程的区别在于:是由用户或应序显式调器与存储过程的区别在于:是由用户或应序显式调器与存储过程的区别在于:是由用户或应序显式调,而触发器是不能被直接调用的,由DBMS 自动执行。

触发器具有这些具有这些功能:功能: 1、允许、允许 /限制对表的修改限制对表的修改限制对表的修改;2、自动生成派列,比、自动生成派列,比、自动生成派列,比如自增字段如自增字段;3、强制数据一致性、强制数据一致性、强制数据一致性;4、提供审计和日志记录、提供审计和日志记录、提供审计和日志记录;5、防止无效的事、防止无效的事、防止无效的事务处理;6、启用复杂的业务逻辑。

本次实验了解MySQL 触发器的创建、修改和删除方法步骤,掌握在 Navicat for MySQL Navicat for MySQL Navicat for MySQL 中对触发器的进行创建、修改和删除,掌握测试的方法。

二、实验要求
1、实验前:预习内容,学相关知识。

2、实验中:按照内容要求进行,时注意每种SQL 语句的语句的基本命令及各个关键字的含义,做好实验记录。

3、实验后:分析结果,总知识得出论按格式写报告。

4、在整个实验过程中,要独立思考按时完成任务不懂的虚心向、在整个实验过程中,要独立思考按时完成任务不懂的虚心向、在整个实验过程中,要独立思考按时完成任务不懂的虚心向、在整个实验过程中,要独立思考按时完成任务不懂的虚心向、在整个实验过程中,要独立思考按时完成任务不懂的虚心向、在整个实验过程中,要独立思考按时完成任务不懂的虚心向、在整个实验过程中,要独立思考按时完成任务不懂的虚心向、在整个实验过程中,要独立思考按时完成任务不懂的虚心向、在整个实验过程
中,要独立思考按时完成任务不懂的虚心向、在整个实验过程中,要独立思考按时完成任务不懂的虚心向教师或同学请。

5、要求按指定格式书写实验报告,且中应反映出对、要求按指定格式书写实验报告,且中应反映出对、要求按指定格式书写实验报告,且中应反映出对、要求按指定格式书写实验报告,且中应反映出对、要求按指定格式书写实验报告,且中应反映出对、要求按指定格式书写实验报告,且中应反映出对、要求按指定格式书写实验报告,且中应反映出对、要求按指定格式书写实验报告,且中应反映出对本次实验的总结,下次实验的总结,下
次实验的总结,下次实验前交实验报告。

三.实验步骤
1.启动Navicat for MySQL,在MySQL –新建连接中完成连接参数配置。

2.登录到本地数据库服务器后,连接到test数据库上。

3.执行五、教学过程中(三)实验内容的第一部分创建简单触发器,验证触发器的创建和触发器的触发测试。

CREATE TABLE student
(SNO VARCHAR(10),
SNAME VARCHAR(30),
SAGE INT);
CREATE TABLE student_log(
who VARCHAR(30),
whattime TIMESTAMP);
SELECT * FROM student_log;
USE test;
CREATE TRIGGER audit_student
BEFORE INSERT ON student
FOR EACH ROW
BEGIN
INSERT INTO student_log(who,whattime) VALUES (`CURRENT_USER`,`CURRENT_TIMESTAMP`);
END;
insert into student
values ('1992150033','吴思远',40);
SELECT * from student_log;
4.执行五、教学过程中(三)实验内容的第二部分改造简单触发器,增加触发类型判断功能,验证触发器的改造和改造后的触发器触发测试。

alter table student_log add (action varchar (20));
insert into student
values ('1992150034','张飒飒',38);
select * from student_log;
5.自行编写student表的触发器aduit_student_update,在对student 表进行更新操作前触发,触发时,向student_log表写入触发用户、触发时间和触发类型。

对该新建进行触发测试。

use test;
create trigger audit_student_update
before update on student
for each row
begin
insert into student_log(who,whattime,action)
VALUES
(current_user,current_timestamp,'update');
end;
update student
set sage=sage+1;
select * from student_log;
6.自行编写student表的触发器aduit_student_delete,在对student 表进行删除操作后触发,触发时,向student_log表写入触发用户、触发时间和触发类型。

并对该新建进行触发测试。

use test;
create trigger audit_student_delete
after delete on student
for each row
begin
insert into student_log(who,whattime,action)
VALUES
(current_user,current_timestamp,'delete');
end;
delete from student
where sage=40
select * from student_log;
四.实验总结
1、如何删除触发器?
答:drop trigger audit_student;
2、如何启用和禁用触发器?
答:alter table tb
Disable/enable trigger tir_name
实验八DCL
一、实验目的
SQL的数据控制通过DCL(数据控制语言) 实现。

DCL通过对数据库用户的授权和权限回收命令来实现有关数据的存取控制,以保证数据库的安全性。

本次实验了解DCL语言的GRANT和REVOKE语句对数据库存取权限的控制,学会在Navicat for MySQL中用GRANT、REVOKE 语句对数据库存取权限进行设定。

二、实验要求
1、实验前:预习实验内容,学习相关知识。

2、实验中:按照实验内容要求进行实验,实验时注意每种SQL语句的基本命令及各个关键字的含义,做好实验记录。

3、实验后:分析实验结果,总结实验知识,得出结论,按格式写出实验报告。

4、在整个实验过程中,要独立思考、独立按时完成实验任务,不懂的要虚心向教师或同学请教。

5、要求按指定格式书写实验报告,且报告中应反映出对本次实验的总结,下次实验前交实验报告。

三、实验的重点与难点
1、重点:
(1)权限的授予。

(2)权限的回收。

2、难点:
权限授予的WITH GRANT OPTION子句使用。

当用户对某操作无权限时,如何对其进行授权。

四、仪器设备及用具
硬件:投影仪、每位同学分配已连接校园网PC机一台。

软件:数据库服务器已安装MySQL5.5
五、实验步骤:
REVOKE SELECTon mysql.hostfromjason;
六.实验总结
1、对象权限与系统权限有何区别?
答:拥有系统权限就意味着可以操作该数据库系统的所有对象。

而对象权限就是说只能操作某个特定对象。

2、如何进行角色的权限授予与回收?
答:grant语句
Revoke语句。

相关文档
最新文档