实验楼mysql挑战三---mysql的触发器trigger,过程rpocedure,授权grant的使用

这是实验楼mysql入门的链接

我记录一下挑战三(在最下面)的解题过程.

载入数据

  • 下载
    wget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sql
  • 打开mysql服务
    sudo service mysql start
  • 登陆
    mysql -u root -p #实验楼的root没有密码 可以直接mysql -u root
  • 从文件载入
    source createdb2.sql

查看数据库结构

这里写图片描述
学生表(student):学生 id 、学生姓名和性别

课程表(course):课程 id 和课程名

成绩表(mark):成绩 id 、学生 id 、课程 id 和分数

成绩更新表(modifymark):成绩 id (m_mid)、学生 id (m_sid)、课程 id(m_cid) 、分数(m_score)和更新时间(m_time),表结构与 mark 表大致类似。
这里写图片描述

要求

  1. 创建触发器 trigger_modify 实现当 mark 表有分数被修改时,将更新后的整条数据插入到 modifymark 表中。测试将 Tom 的化学成绩在原来的基础上加3分,查看 modifymark 中是否插入了数据

  2. 创建存储过程 math_proc 将数学课的全部学生的成绩按降序排列显示。包括课程名(cname) math、学生姓名(sname)以及分数(score)

  3. 创建用户 testuser,密码为 123456,并为其分配在数据库 gradesystem 下所有表的 select 权限

添加触发器

# this is a inline comment

delimiter /   # change delimiter as /

create trigger trigger_modify after update on mark 
for each row begin 
set @tmie=now();
insert into modifymark(m_mid,m_sid,m_cid,m_score) values (new.mid,new.sid,new.cid,new.score,@time);
end/

# 或者 insert into modifymark(m_mid,m_sid,m_cid,m_score) values (new.mid,new.sid,new.cid,new.score,now());

更新

update mark set score=score+3  
where sid=(select sid from student where sname="Tom") 
and   cid=(select cid from course where cname="chemistry");

创建存储过程

create procedure math_proc () 
begin 
select  cname, sname,score 
from mark natural join student  natural join course 
where cid=(select cid from course where  cname="math") 
order by score desc;
end /

# 更一般的,通过传递参数决定课程
create procedure course_proc (coursename char(10)) 
begin select  cname, sname,score 
from mark natural join student  natural join course 
where cid=(select cid from course where  cname=coursename) 
order by score desc;
end /

delimiter ;

# 或者
create procedure course_proc (coursename char(10)) 
begin select  cname, sname,score 
from mark as m, student  as s,as c
where c.cid=s.cid and m.cid=s.sid and s.cid=c.cid
order by score desc;
end /

创建用户

create user 'testuser'@'localhost' identified by '123456';

授权

grant select on gradesystem.* to testuser;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值