MySQL高级对象

一.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 触发器名称;

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

layroy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值