一.MySQL视图
1.定义:视图就是一条select语句执行后返回的结果集
2.使用场景:权限控制的时候,不希望用户访问表中某些含敏感信息的列,比如salary工资
3.语法(创建):create view 视图名称
as
select 语句
例:
建立用于查询借阅记录中借阅人姓名,借阅书籍名称,借阅时间的视图
create view view_info
as
select name as 姓名,bname as 名称,rdate as 借阅时间 from books a,card b,info c where a.bno=c.bno and b.cno=c.cno;#多条查询 起别名
#成功视图查看
show tables;
#使用 虚拟表
select * from view_info;
(修改):alter view 视图名称
as
select 语句
例:姓名,书名
alter view view_info
as
select name as 姓名,bname as 名称 from books a,card b,info c where a.bno=c.bno and b.cno=c.cno;
(删除):drop view 视图名; 删除视图
drop view if exists 视图名称; 先判断是否存在再进行删除
4.查看 show tables;
注意:视图创建成功后可以在表展示中显示,但实际不存在,相当于一个虚拟表,使用方法按照表操作进行
二.MySQL存储过程
1.定义:存储在数据库当中可以执行特定工作(查询和更新)的一组SQL代码的程序段。类似于功能函数
2.语法(创建): create procedure 存储过程名称(参数列表)
begin
存储操作的语句块
end
注意:当语句结束;有冲突时使用delimiter定义新的结束方法
(调用):call 存储过程名称;
(有参调用):call 存储过程名称(参数1,参数2,..);
(查看所有的存储过程):show procedure status;
(删除存储过程):drop procedure if exists 存储过程名称;
3.参数分两种
①in 给参数传入值,定义的参数就得到了值
语法:in 参数名 表中字段的类型
②out 返回值
语法:out 参数名 返回的数据类型
4.存储过程分为
①无参无返回值的存储过程
②有参无返回值的存储过程
③无参有返回值的存储过程
④有参有返回值的存储过程
例1:
创建一个无参无返回值的存储过程,用于查询所有借阅记录
#修改sql语句结束标识符
delimiter//
create proceduce pro_info()
begin
select * from info;
end//
--调用存储结构
call pro_info;
例2:
创建一个有参无返回值的存储过程,用于查询某个价格(20-200)范围内的信息
Select * from books where price between 20 and 200;
#有参数 一个价格 2个价格
--in 名字/数据类型
delimiter//
create proceduce pro_books(in price1 float,price2 float)
begin
select * from books where price between 20 and 200;
end//
--有参数,call存在过程的名字(传入的参数);
call pro_books(20,200);
例3:
创建一个无参有返回值的存储过程,用于查询所有图书的平均价格
select avg(price) as 平均价格 from books;
--out 参数的名称 数据类型
delimiter//
create proceduce pro_books(out priceAvg float)
begin
select avg(price) into priceAvg from books;
end//
call books1(@priceAvg);
select @priceAvg;
--查看所有的存储过程
show proceduce status;
--删除 (先判断是否存在再删除)
drop proceduce if exists pro_books;
三.MySQL触发器
1.定义:当一件事情发生的时候会引发其他相关的事件发生
只有当一个预定义的事件发生的时候,就会被MySQL自动调用
2.语法:(创建): create trigger 触发器名称{before|after}{inster|update|delete} on 表名
for each row[针对每一条都触发]
begin
触发器执行的语句块
end
注意:当语句结束;有冲突时使用delimiter定义新的结束方法
例1:
创建insert触发器,当在card表中新增加一个借阅用户的时候,显示“新增用户成功”
detimiter//
create trigger tri_insert_card after insert on card
for each now
begin
--into 只是把结果赋值给了result @后面可随便写名称
select “新增用户成功” into @result;
end//
select * from card;
insert into card(name,class) values (“唐三”,”大数据1班”);
--查询 @result结果名称
select @result;
例2:
创建insert触发器,借阅人借阅一本书会在info表中产生一条记录,此时被借阅的书籍的总数量应该减1,触发在info表中
#获取添加的借阅记录的bno(图书号)
#更新数量信息
--update books set quanitity-1 where 哪本书;
--如果我们能够拿到新插入的那条借阅记录的bno
select * from info;
detimiter//
create trigger tri_insert_info after insert on info
for each row
begin
select new.bno into @bnovalue;
--拿到插入的那条借阅记录的bno
update books set quanitity-1 where @bnovalue;
--进行数据的更新
end
查三个表:
insert into info(cno,bno,rdate) values (106,1006,now());
(显示所有的触发器):show triggers;
(删除存储过程):drop triggers if exists 触发器名称;