Mysql数据库实验报告--实验五 存储过程和触发器

这篇具有很好参考价值的文章主要介绍了Mysql数据库实验报告--实验五 存储过程和触发器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在这个系列会更新一些最近老师要求写的实验报告~
大家尽量对着我的文章做一个参考,不要盲目的cv,毕竟这个对于我们以后的工作学习还是十分重要的。

从这个实验开始,就不在cmd命令行里面进行mysql数据库的操作,因为代码长度和代码的复杂性,需使用 MySQL Workbench:
Mysql数据库实验报告--实验五 存储过程和触发器
双击数据库(密码还是启动cmd命令行的密码)
Mysql数据库实验报告--实验五 存储过程和触发器
使用示例:
查询databases

show databases;

运行当前行:ctrl+enter
Mysql数据库实验报告--实验五 存储过程和触发器
其他常用快捷方式:
1、执行整篇sql脚本:【Ctrl】+【Shift】+【Enter】

2、执行当前行:【Ctrl】+【Enter】

3、注释/取消注释:【Ctrl】+【/】

4、格式化sql语句(美化sql语句):【Ctrl】+【B】

5、自动补全:【Ctrl】+【Space】


事不宜迟,贴上本次实验的题目:

创建学生表,课程表,选课表。

#创建学生表:包括学号,姓名,年龄,性别,院系
CREATE TABLE student
(
Sno VARCHAR(7)PRIMARY KEY,
Sname VARCHAR(10)NOT NULL,
Sage INT,
Ssex VARCHAR(2),
Sdept VARCHAR(20) DEFAULT '计算机系'
);

#创建课程表:包括课程号,课程名,选修课课程号,学分
CREATE TABLE course
(
Cno VARCHAR(10)PRIMARY KEY,
Cname VARCHAR (20)NOT NULL,
Cpno VARCHAR(10),
Ccredit INT
);


#创建选课表
CREATE TABLE sc
(
Sno VARCHAR(7),
Cno VARCHAR(10),
grade INT,
FOREIGN KEY (sno) REFERENCES student(Sno),
FOREIGN KEY (cno) REFERENCES course(cno)
);

向表中插入数据:

#  向学生表S中插入数据
INSERT INTO student
   (Sno,Sname,Sage,Ssex,Sdept)
VALUE
   ("10001","张三",20,'男','计算机'),
   ("10002","李梅",19,'女','计算机'),
   ("10003","王五",18,'男','CS'),
   ("10004","小明",21,'男','计算机'),
   ("10006","黎明",18,'男','艺术表演'),
   ("10008","杰克",21,'男','计算机'),
   ("10005","小红",22,'女','CS');

#  向课程表C中插入数据   
INSERT INTO course
   (Cno,Cname,Cpno,Ccredit)
VALUE
   ("1","离散数学",NULL,5),
   ("2","线性代数",'3',6),
   ("3","高等数学",NULL,4),
   ("4","数据结构",'3',6),
   ("5","操作系统",'1',4),
   ("6","数据库",'4',5);



#  向选课表SC中插入数据  
INSERT INTO sc
  (Sno,Cno,grade)
VALUE
  ("10001","1",70),
  ("10001","6",56),
  ("10003","4",90),
  ("10003","5",83),
  ("10004","1",75),
  ("10004","3",90),
  ("10008","1",70),
  ("10008","5",70),
  ("10008","6",88),
  ("10002","1",85),
  ("10002","6",89);

一、创建并调用如下的存储过程。

1、 定义一个存储函数,按性别计算所有学生的平均年龄。

delimiter //
create procedure avg_age_sex(in stu_sex varchar(30))
begin
select avg(Sage) from student where Ssex=stu_sex;
end//
delimiter ;
call avg_age_sex('女');

2、 编写存储过程,根据给定的学生学号,计算该生的平均成绩

delimiter //
create procedure avg_grade_cno1(in stu_cno int)
begin
select avg(grade) as '平均成绩' from sc where Cno=stu_cno;
end//
delimiter ;

call avg_grade_cno1(1);

3、 创建存储过程,能够查询出指定课程(课程名)的平均成绩,并用OUT参数返回结果。

delimiter //
create procedure avg_grade7(in stu_cno varchar(30),out avgsc1 decimal(6,4))
begin
select avg(grade) as '平均成绩' from sc,course where course.Cname=stu_cno and course.Cno=sc.Cno;
end//
delimiter ;
set @avgsc1 = 60;
call avg_grade7('高等数学',@avgsc1);
select @avgsc1;

4、创建存储过程p_Insertstu,实现向学生数据表中插入一个新同学,并提供相应的实参值(实参值由用户自定)。

delimiter //
create  procedure p_Insertstu(in Sno varchar(7),in Sname varchar(10),in Sage int,in Ssex varchar(2),in Sdept varchar(20))
reads sql data
begin
insert into student values(Sno,Sname,Sage,Ssex,Sdept);
end//
delimiter ;
call p_Insertstu('10009','紫涵','20','女','计算机');
select  * from student;

二、创建触发器。

1、创建触发器,在学生表中删除学生信息的同时将选课信息表中该学生的选课信息删除,以确保数据的完整性;

#关闭安全模式
show variables like 'SQL_SAFE_UPDATES';
SET SQL_SAFE_UPDATES = 0;
drop trigger if exists delete_stu;
#题目代码
delimiter //
create trigger delete_stu1
after delete on student
for each row
begin 
	delete from sc where sc.Sno=@Sno;
end //

2、创建触发器,在选课信息表中添加学生选课信息的同时,增加学生表中该学生的选课数量信息,以确保数据的完整性;

delimiter //
create trigger update_stu1
after insert on sc
for each row
begin 
	set @csum=0;
    select count(Sno) into @csum from sc where Sno=@Sno;
	update student set csum=@csum where Sno=@sno;
end //

完整sql文件:
链接:https://pan.baidu.com/s/1PD_mD9Q-uCNQPANq2TmFew?pwd=69ev
提取码:69ev

推荐一个b站讲的不错的视频:
mysql数据库高级篇文章来源地址https://www.toymoban.com/news/detail-489082.html

到了这里,关于Mysql数据库实验报告--实验五 存储过程和触发器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库系统原理及MySQL应用教程实验八触发器创建与管理

    1.理解触发器的概念与类型。 2.理解触发器的功能及工作原理。 3.掌握创建、更改、删除触发器的方法。 4.掌握利用触发器维护数据完整性的方法。 1.验证性实验:某同学定义产品信息product表,并对其触发器创建与管理 2.设计性试验:某同学定义产品信息product表,并对其

    2024年02月04日
    浏览(51)
  • 数据库实验6 存储过程实验

    前言:游标的mysql代码不懂写,所以没有运行结果 实验6.1 存储过程实验 1.实验目的 掌握数据库 PL/SQL 编程语言,以及数据库存储过程的设计和使用方法。 2.实验内容和要求 存储过程定义,存储过程运行,存储过程更名,存储过程删除,存储过程的参数传递。掌握PL/SQL编程语言和编

    2024年02月04日
    浏览(55)
  • MySQL数据库 实验报告(一)

    实验报告(一) 1、实验目的 (1)掌握系统数据类型的特点和功能 (2)掌握创建、修改表结构的方法 (3)掌握数据添加的方法 2、实验预习与准备 (1)MYSQL中创建数据库的命令 (2)表结构的创建、修改和删除 (3)MYSQL导入导出表数据的方式 (4)添加数据的SQL命令 3、实

    2024年02月05日
    浏览(59)
  • 数据库实验 | 第5关:使用游标的存储过程

    本关任务: jdxx数据表有四个字段,分别是省份(sf)、城市(cs)、区县(qxmc)、街道(name)。 例如,查询天心区(qxmc)的所有字段的值结果如图所示 建立存储过程 tjdq(in sf varchar(10)) 输入省份的名称,将该省份所有城市的所有地区的 乡x、镇z和街道jd和其他的个数插入到数据表dqtj中。

    2023年04月23日
    浏览(43)
  • MySQL数据库设计作业 ——《网上书店系统》数据库设计实验报告

    普通用户:可以进行最基础的登陆操作,可浏览图书、按类别查询图书、查看 图书的详细信息,还可以注册成为会员。 会员:需要填写详细信息(真实姓名、性别、手机号、地址、邮箱等),可浏览图书、按类别查询图书、查看图书的详细信息,在此基础上,还可以订购图

    2024年02月04日
    浏览(77)
  • 【MySQL 数据库】9、存储过程

    🌱 存储过程是事先经过编译并存储在数据库中的 SQL 语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,可以提高数据处理效率 🌱 存储过程思想上很简单:就是数据库 SQL 语言层面的代码封装与重用 🍃 【封装,复用

    2024年02月08日
    浏览(49)
  • 数据库(MySQL)的存储过程

    存储过程是事先经过编译并存储在数据库中的一段SQL 语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。 存储过程思想上很简单,就是数据库SQL 语言层面的代码封装与重用。 特点

    2024年02月10日
    浏览(44)
  • MySQL数据库中的存储过程以及存储函数练习

     字段名       数据类型       主键    外键    非空   唯一    自增       id             INT               是      否       是       是           否    name    VARCHAR(50)   否      否       是       否           否    glass   VARCHAR(50)     否   

    2024年02月15日
    浏览(45)
  • MySQL数据库——MySQL修改存储过程(ALTER PROCEDURE)

    在实际开发过程中,业务需求修改的情况时有发生,所以修改 MySQL 中的存储过程是不可避免的。 MySQL 中通过 ALTER PROCEDURE 语句来修改存储过程。下面将详细讲解修改存储过程的方法。 MySQL 中修改存储过程的语法格式如下: ALTER PROCEDURE 存储过程名 [ 特征 ... ] 特征 指定了存储

    2024年02月04日
    浏览(45)
  • MySQL数据库——存储过程-变量(系统变量、用户定义变量、局部变量)

    目录 系统变量  1.查看系统变量  2.设置系统变量 演示示例 用户定义变量 1.赋值  2.使用 演示示例 局部变量 声明  赋值 演示示例 变量 在MySQL中变量分为三种类型: 系统变量、用户定义变量、局部变量。 系统变量是MySQL服务器提供,不是用户定义的,属于服务器层面。分为全

    2024年02月05日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包