网络数据库技术课程实验指导(7)

2018-12-17 10:20

END$$ DELIMITER ;

调用该存储过程并查看结果。

思考题:

1. 创建存储过程,要求当一个员工的工作年份大于6年时将其转到经理办公室工作。

2. 创建存储过程,使用游标计算本科及以上学历的员工在总员工数中所占的比例。

2.存储函数

(1)创建一个存储函数,返回员工的总人数。

CREATE FUNCTION EM_NUM( )

RETURNS INT

RETURN(SELECT COUNT(*) FROM Employees);

调用该存储函数:

SELECT EM_NUM();

(2)创建一个存储函数,检验一个员工号是否在Salary表中有但在Employees表中不存在,若是则删除Salary表中该员工并返回TRUE,否则返回FALSE。

DELIMITER $$

CREATE FUNCTION DELETE_EM(EM_ID CHAR(6) )

RETURNS BOOLEAN BEGIN

DECLARE NUM1,NUM2 INT;

SELECT COUNT(*) INTO NUM1 FROM Salary WHERE EmployeeID=EM_ID;

SELECT COUNT(*) INTO NUM2 FROM Employees WHERE EmployeeID=EM_ID;

IF NUM1=1 AND NUM2=0 THEN

30

DELETE FROM Salary WHERE EmployeeID=EM_ID; RETURN TRUE;

ELSE

RETURN FALSE; END IF; END$$ DELIMITER ;

调用该存储函数:

SELECT DELETE_EM ('000001');

往Salary表中插入一行记录后调用该存储函数。

INSERT INTO Salary values('000002',1212,123); SELECT DELETE_EM ('000002');

观察并总结上面两次调用结果的不同。

思考题:

1. 创建存储函数,判断员工是否在研发部工作,若是则返回其学历,若不是则返回字符串“NO”。

3.触发器

(1)创建触发器,在Employees表中删除员工信息的同时将Salary表中该员工的信息删除,以确保数据完整性。

CREATE TRIGGER DELETE_EM AFTER DELETE

ON Employees FOR EACH ROW

DELETE FROM Salary WHERE EmployeeID=OLD. EmployeeID;

创建完后删除Employees表中的一行数据,然后查看Salary表中的变化情况。

(2)创建表Departments1,其结构和内容与表Departments都相同

CREATE TABLE Departments1 LIKE Departments;

INSERT INTO Departments1 SELECT * FROM Departments;

在表Departments上创建一个触发器,如果添加一个新的部门,该部门也会添加到表Departments1中。

31

DELIMITER $$

CREATE TRIGGER Departments_Ins AFTER INSERT BEGIN END$$ DELIMITER ;

创建完后添加一个部门到Departments,然后查看Departments1表中的变化情况。

ON Departments FOR EACH ROW INSERT INTO Departments1

VALUES(NEW.DepartmentID,NEW.DepartmentName,NEW.Note);

(3)创建触发器,当修改Employees表时,若将Employees表中员工的工作时间增加1年,则将收入增加500,增加2年则增加1000,依次类推。若工作时间减少则无变化。

DELIMITER $$

CREATE TRIGGER ADD_SALARY AFTER UPDATE BEGIN

DECLARE YEARS INT;

SET YEARS=NEW.WorkYear-OlD.WorkYear; IF YEARS>0 THEN

UPDATE Salary SET InCome=InCome+500*YEARS WHERE

EmployeeID=NEW. EmployeeID;

END IF;

END$$ DELIMITER ;

创建完后修改Employees表中的一个职工的工作时间,然后查看Salary表中对应职工的收入变化情况。

ON Employees FOR EACH ROW

思考题:

1. 创建UPDATE触发器,当表Departments中的部门号发生变化时,Employees表中的员工所属的部门号也将改变。

32

4.事件

(1)创建一个立即执行的事件,插入Employees表中一行数据。

CREATE EVENT DIRECT

ON SCHEDULE AT NOW() DO

INSERT INTO employees (EmployeeID, Name, Education, Birthday, Sex, WorkYear, Address, PhoneNumber, DepartmentID) VALUES

('110011','王小林','大专','1966-01-23','1','1996-09-01','中山路

32-1-508','83355668','2');

(2)创建一个事件,每天执行一次,它从明天开始直到2013 年12月31日结束。

CREATE EVENT every_day

ON SCHEDULE EVERY 1 DAY

STARTS CURDATE()+INTERVAL 1 DAY ENDS '2013 -12-31' DO

SELECT * FROM Employees; 思考题:

本次实验中遇到的问题及解决方法。

33

实验9 备份与恢复

实验类型: 验证型 实验课时: 2 指导教师: 时 间:20 年 月 日 课 次:第 节 教学周次:第 周 实验分室: 实验台号: 实 验 员:

实验目的:

1.掌握界面方式下数据库的备份和还原 2.掌握使用SQL语句进行数据库备份和恢复 3.掌握使用客户端程序进行数据库的备份和还原

实验要求:

理解数据库的备份和还原的重要性及基本方法

实验内容:

1.界面方式下进行数据库备份和还原 2.SQL语句进行数据库备份和还原 3.使用客户端程序进行数据库的备份和还原

实验步骤:

说明:按实验步骤对数据库YGGL中的三个表进行操作,三个表结构如下(具体参看实验2): Departments (DepartmentID,DepartmentName,Note) Employees

(EmployeeID,Name,Sex,Birthday,Education,WorkYear,Address,PhoneNumber,DepartmentID)

Salary(SalaryID,InCome,OutCome,Time, EmployeeID) 要求:将实验步骤中紫色底纹部分填上正确答案。 1. 界面方式下进行数据库备份和还原

(1)在MySQL Workbench中进行数据库YGGL的备份。 (2)在MySQL Workbench中进行数据库YGGL的恢复。 2.用SQL语句进行数据库备份和还原

使用SQL语句只能备份和恢复表的内容,如果表的结构损坏,则要先恢复表的结构才能恢复数据。

34


网络数据库技术课程实验指导(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:Office基本操作

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: