MySQL 基础教程[2]
- 本系列MySQL 基础教程通过“问题-代码”的方式介绍各类方法,每篇设置2个MySQL综合问题,并给出解决方案。
问题1
学生数据库 db_student中有学生表tb_student和课程成绩表tb_score, tb_student包含的字段有 sno (学号)、sname (姓名)、sage (年龄) 和smajor (专业), tb_score包含的字段有 sno (学号) 、cname (课程名 称) 和grade (成绩) 。
- 使用SQL语句, 在tb_student表中添加一个字段ssex, 数据类型为 char, 长度为 1 , 缺省值为 "
- 用 SQL语句在tb_student表上建立关于学号的唯一性索引idx stu。
- 新建一个名称为newuser的用户, 主机名为 localhost, 并为其授予对tb_student表的select权限。
问题1代码
#【1】
alter table tb_student add column ssex char(1) default "M";
#【2】
update tb_student set smajor="计算机" where sno=100;
#【3】
create view v_avg(cname, caverage) as select cname avg(grade) from tb_score group by cname;
#【4】
create unique index idx_stu on tb_student(sno);
#【5】
create user 'newuser'@'localhost';
grant select on tb_student to 'newuser'@'localhost' with grant option;
问题2
- 设计一个名称为 fn_cmax的存储函数, 根据给定的课程名返回选修该课程的最高分, 并写出调用函数的语句。
- 设计一个名称为ev_bak的事件, 每日将学生数据库db_student中学生表tb_student的数据备份到考生文件夹下的文 件bakfile.txt中。
问题2代码
#【1】
DELIMITER $$
CREATE function fn_cmax(cn CHAR(20))
RETURNS int
DETERMINISTIC
BEGIN
DECLARE tmp INT;
SELECT max(grade) INTO tmp
FROM tb_score
WHERE cname=cn;
RETURN tmp;
END $$
DELIMITER ;
#【2】
DELIMITER $$
CREATE event ev_bak ON SCHEDULE every 1 DAY
DO
BEGIN
SELECT * FROM db_student.tb_student INTO OUTFILE 'bakfile.txt' FIELDS TERMINATED BY ',';
END $$
DELIMITER ;