一、实验项目:
使用MySQL进行应用系统开发。
二、实验目的
使学生具备使用MySQL技术进行应用系统开发的能力。
三、实验内容
(一):
1、员工管理系统的业务逻辑如下:
实体“员工”的属性有员工编号、姓名、学历、出生日期、性别、工作年限、地址、电话和所属部门。
实体“部门”的属性有部门编号、名称、备注。
实体“员工薪水”的属性有员工编号、收入、支出。
2、创建员工管理数据库yggl。
1. create database yggl; 2. Show databases;
3、在员工管理数据库yggl中创建员工信息表employees、部门信息表departments和员工薪水情况表salary。
1. use yggl; 2. CREATE TABLE departments ( 3. deptid char(3) NOT NULL, 4. deptname char(20) NOT NULL, 5. memo text, 6. PRIMARY KEY (deptid)); 7. 8. CREATE TABLE employees ( 9. empid char(6) NOT NULL, 10. empname char(10) NOT NULL, 11. edu char(4) NOT NULL, 12. birth date NOT NULL, 13. sex char(2) NOT NULL, 14. jobyear tinyint, 15. address varchar(20), 16. phone char(12), 17. deptid char(3) NOT NULL, 18. PRIMARY KEY (empid), 19. foreign key(deptid) 20. references departments(deptid)); 21. 22. CREATE TABLE salary ( 23. empid char(6) NOT NULL, 24. inmoney float(8,2) NOT NULL, 25. outmoney float(8,2) NOT NULL, 26. PRIMARY KEY(empid), 27. foreign key(empid) 28. references employees(empid)); 29. show tables;
4、对员工管理数据库yggl创建视图emp_view1,包含所有男员工的员工号码、姓名、工作年限和学历。
1. create or replace view emp_view1(员工编号,姓名,工作年限,学历) as 2. select empid,empname,jobyear,edu from employees 3. where sex='男'; 4. select * from emp_view1;
5、对employees表中的部门编号列创建普通索引depart_ind。
1. create index depart_ind on employees(deptid); 2. Show index from employees\G
6、创建存储过程,比较两个员工的实际收入,如前者比后者高就输出0,否则输出1,并调用该存储过程比较000001和010008两个员工的收入。
1. delimiter $$ 2. create procedure cp(in id1 char(6),in id2 char(6),out bj int) 3. begin 4. declare sr1,sr2 float(8,2); 5. select inmoney-outmoney into sr1 from salary where empid=id1; 6. select inmoney-outmoney into sr2 from salary where empid=id2; 7. if sr1> sr2 then set bj=0; 8. else set bj=1; 9. end if; 10. end $$ 11. delimiter ; 12. call cp('000001','010008',@bj); 13. select @bj;
(二):
1、创建一个存储函数em_num,返回员工的总人数。
1. delimiter $$ 2. create function em_num() returns integer 3. begin 4. return ( select count( * ) from employees); 5. end $$ 6. delimiter ; 7. select em_num();
2、创建触发器,在employees表中删除员工信息的同时将salary表中与该员工相关的数据全部删除。
1. DELIMITER $$ 2. CREATE TRIGGER EM_DELETE AFTER DELETE 3. ON Employees FOR EACH ROW 4. BEGIN 5. DELETE FROM salary WHERE empid=OLD.empid; 6. END$$ 7. DELIMITER ; 8. delete from employees where empid='000001';
3、创建事件,在该事件中创建表temp用来保存员工的总人数,每年统计一次,从现在开始。
1. set @@global.event_scheduler=true; 2. create table temp(counts int not null primary key); 3. create event tjemp on schedule every 1 year starts now() 4. do insert into temp select count(*) from employees; 5. select * from temp;
4、创建数据库用户user1,密码为1234。
1. create user user1@localhost identified by '1234'; 2. select user from mysql.user;
5、授予用户user1对yggl库中employees表的select操作权限。
1. grant select on yggl.employees to user1@localhost; 2. Show grants for user1@localhost;
6、收回用户user1对yggl库中employees表的select操作权限。
1. revoke select on yggl.employees from user1@localhost; 2. Show grants for user1@localhost;
7、备份yggl数据库中departments表的数据到D盘。要求字段值如果是字符就用双引号标注,字段值之间用逗号隔开,每行以“?”为结束标志。
1. SELECT * FROM departments INTO OUTFILE 'D:/myfile.txt' 2. FIELDS TERMINATED BY ',' 3. OPTIONALLY ENCLOSED BY '"' 4. LINES TERMINATED BY '?';
8、将上题中的备份文件数据导入bk_depart表中。
1. CREATE TABLE bk_depart LIKE departments; 2. LOAD DATA INFILE 'D:/myfile.txt' INTO TABLE bk_depart 3. FIELDS TERMINATED BY ',' 4. OPTIONALLY ENCLOSED BY '"' 5. LINES TERMINATED BY '?'; 6. Select * from bk_depart;