一、学习目标
- 掌握如何创建存储过程
- 掌握如何创建存储函数
- 熟悉变量的使用方法
- 熟悉如何定义条件和处理程序
- 了解光标的使用方法
- 掌握流程控制的使用
- 掌握如何调用存储过程和函数
- 熟悉如何查看存储过程和函数
- 掌握修改存储过程和函数的方法
- 熟悉如何删除存储过程和函数
- 掌握创建存储过程和函数的方法和技巧
- 了解视图的含义和作用
- 掌握创建视图的方法
- 熟悉如何查看视图
- 掌握修改视图的方法
- 掌握更新视图的方法
- 掌握删除视图的方法
- 掌握视图应用的方法和技巧
二、实验内容
- 通过实例掌握存储过程和函数的创建和使用,步骤如下:
①创建一个名称为sch的数据表,表结构如下所示,将下面sch表内容中的数据插入到sch表中
sch表结构
字段名 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
id | INT(11) | 是 | 否 | 是 | 是 | 否 |
name | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
glass | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
sch表内容
id | name | glass |
1 | xiaoming | glass1 |
2 | xiaojun | glass2 |
②创建一个存储函数,用来统计表sch中的记录数
③创建一个存储过程,通过调用存储函数的方法来获取表sch中的记录数和sch表中id的和
- 掌握视图的创建、查询、更新和删除操作。
假如HenanHebei的3个学生参加Tsinghua University、Peking University的自学考试,现在需要用数据对其考试的结果进行查询和管理,Tsinghua University的分数线为40,Peking University的分数线为41。学生表包含了学生的学号、姓名、家庭住址和电话号码;报名表包含学号、姓名、所在学校和报名的学校,表结构以及表中的内容分别如下列各表所示。
stu表结构
字段名 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
s_id | INT | 是 | 否 | 是 | 是 | 否 |
s_name | VARCHAR(20) | 否 | 否 | 是 | 否 | 否 |
addr | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
tel | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
sign表结构
字段名 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
s_id | INT | 是 | 否 | 是 | 是 | 否 |
s_name | VARCHAR(20) | 否 | 否 | 是 | 否 | 否 |
s_sch | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
s_sign_sch | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
stu_mark表结构
字段名 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
s_id | INT | 是 | 否 | 是 | 是 | 否 |
s_name | VARCHAR(20) | 否 | 否 | 是 | 否 | 否 |
mark | INT | 否 | 否 | 是 | 否 | 否 |
stu表内容
s_id | s_name | addr | tel |
1 | XiaoWang | Henan | 0371-12345678 |
2 | XiaoLi | Hebei | 1336312XXXX |
3 | XiaoTian | Henan | 0371-12345670 |
sign表内容
s_id | s_name | s_sch | s_sign_sch |
1 | XiaoWang | Middle School1 | Peking University |
2 | XiaoLi | Middle School2 | Tsinghua University |
3 | XiaoTian | Middle School3 | Tsinghua University |
stu_mark表内容
s_id | s_name | mark |
1 | XiaoWang | 80 |
2 | XiaoLi | 71 |
3 | XiaoTian | 70 |
步骤如下:
①创建学生表stu,插入3条记录
②创建报名表sign,插入3条记录
③创建成绩表stu_mark,插入3条记录
④创建考上Peking University的学生的视图
⑤创建考上Tsinghua University的学生的视图
⑥XiaoTian的成绩在录入的时候录入错误,多录了50分,对其录入成绩进行更正
⑦查看更新过后视图和表的情况
⑧查看视图的创建信息
⑨删除创建的视图
1.1
create table sch(id int(11) primary key not null unique,name varchar(50) not null,glass varchar(50) not null);
1.2
insert into sch (id,name,glass)values(1,'xiaoming','glass1'),(2,'xiaojun','glass2');
1.3
create function count_sch()
returns int reads sql data
return (select count(*) from sch);
1.4
delimiter
create procedure add_id(out count int)
begin declare itmp int;
declare cur_id cursor for select id from sch;
declare exit handler for not found close cur_id;
select count_sch() into count;
set @sum=0;
open cur_id;
repeat
fetch cur_id into itmp;
if itmp < 10
then set @sum = @sum + itmp;
end if;
until 0 end repeat;
close cur_id;
end //
delimiter ;
call add_id(@a);
2.1
create table stu(s_id int primary key not null unique,s_name varchar(20) not null,addr varchar(50) not null,tel varchar(50) not null);
2.2
insert into stu (s_id,s_name,addr,tel)values
(1,'XiaoWang','Henan','0371-12345678'),
(2,'XiaoLi','Hebei','1336312xxxx'),
(3,'XiaoTian','Henan','0371-12345670');
2.3
create table sign(s_id int primary key not null unique,s_name varchar(20) not null,s_sch varchar(50) not null,s_sign_sch varchar(50) not null);
2.4
insert into sign (s_id,s_name,s_sch,s_sign_sch)values
(1,'XiaoWang','Middle School1','Peking University'),
(2,'XiaoLi','Middle School2','Tsinghua University'),
(3,'XiaoTian','Middle School3','Tsinghua University');
2.5
create table stu_mark(s_id int primary key not null unique,s_name varchar(20) not null,mark int not null);
2.6
insert into stu_mark (s_id,s_name,mark)values
(1,'XiaoWang',80),
(2,'XiaoLi',71),
(3,'XiaoTian',70);
2.7
create view beida(id,name,addr,tel,s_sch,mark,sign_sch) as
select stu_mark.s_id,stu_mark.s_name,stu.addr,stu.tel,sign.s_sch,stu_mark.mark,sign.s_sign_sch
from stu_mark,sign,stu
where stu_mark.s_id=sign.s_id and stu.s_id=stu_mark.s_id
and sign.s_sign_sch='Peking University';
2.8
create view qinghua(id,name,addr,tel,s_sch,mark,sign_sch) as
select stu_mark.s_id,stu_mark.s_name,stu.addr,stu.tel,sign.s_sch,stu_mark.mark,sign.s_sign_sch
from stu_mark,sign,stu
where stu_mark.s_id=sign.s_id and stu.s_id=stu_mark.s_id
and sign.s_sign_sch='Tsinghua University';
2.9
update stu_mark set mark=mark-50 where s_name='XiaoTian';
2.10
show create view qinghua;
show create view beida;
2.11
drop view beida;
drop view qinghua;