MySQL 基础教程[6]
- 问题1
- 问题1代码
- 问题2
- 问题2代码
- 本系列MySQL 基础教程通过“问题-代码”的方式介绍各类方法,每篇设置2个MySQL综合问题,并给出解决方案。
问题1
学生社团数据库db_association中有学生表tb_student, 包含字段: 学号 (sno) 、姓名 (sname) 及所 在专业 (smajor) 。社团表tb_group, 包含字段: 社团号 (gno) 、社团名称 (gname)及创建日期(gdate)。学生参 加社团表tb_gs, 包含字段: 社团号(gno)、、学号 (sno) 、在社团中的角色 (grole) 。请按要求完成以下操作。
- 使用 SQL语句在tb student表添加一个字段ssex, 数据类型为 char, 长度为 2 , 字段值允许为空值, 缺省值为“女"。
- 写出用 SQL语句删除“计算机”专业的学生参加社团信息的语句。
- 使用SQL语句建立一个视图v_number, 视图的内容是按照专业统计参加学生社团的人数, 设视图包含的列名为 smajor snumber.
- 使用SQL语句在db_gs表上建立外键, 属性 sno参照学生表的sno。
- 新建一个名称为 tmpuser的用户, 密码是 , 并为其授予对tb_group表的SELECT、INSERT权限。
问题1代码
#【1】
use db_association;
alter table tb_student add column sses char(2) default "女";
#【2】
delete from tb_gs where sno in (select sno from tb_student where smajor="计算机");
#【3】
create view v_number(smajor, snumber) as select smajor, count(distinct tb_gs.sno) from tb_student a, tb_gs b where a.sno=b.sno group by a.smajor;
#【4】
alter table tb_gs add foreign key sno references tb_student(sno);
#【5】
create user 'tmpuser'@'localhost' identified by 'a12345';
grant select, insert on tb_group to 'tmpuser' @'localhost' with grant option;
问题2
学生社团数据库db_associationt中有学生表tb_student、社团表tb_group和学生参加社团表tb_gs。请按 要求完成以下操作。
- 设计一个名称为 sp_list的存储过程, 根据给定的社团名称, 显示参加该社团的学生姓名、专业, 并写出调用存储 过程的语句。
- 设计一个名称为ev_group的事件, 将没有参加任何学生社团的学生名单保存到一个文件中, 每个月执行一次。
问题2代码
#【1】
DELIMITER $$
CREATE PROCEDURE sp_list(in s CHAR(20))
BEGIN
IF s !='' THEN
SELECT sname,smajor FROM tb_student s,tb_gs gs, tb_group g WHERE s.sno=gs.sno AND gs.gno=g.gno AND gname=s;
end if;
END $$
DELIMITER ;
call sp_list('话剧社');
#【2】
DELIMITER $$
CREATE EVENT ev_group ON schedule EVERY 1 MONTH
starts CURDATE()+INTERVAL 1 MONTH
DO
BEGIN
SELECT sno,sname FROM tb_student WHERE sno not in ( SELECT sno FROM tb_gs ) into OUTFILE 'c:/tmp.txt' FIELDS TERMINATED BY ',';
END $$
DELIMITER ;