MySQL 的存储过程和视图

这篇博客介绍了MySQL中的存储过程、触发器和视图的概念及应用。存储过程用于批量处理SQL,提高效率;触发器在特定事件前后执行额外操作,如数据备份;视图则提供了一种简化查询复杂性的手段,允许根据需求定制数据视图。示例中展示了如何创建、执行和删除这些数据库元素。
摘要由CSDN通过智能技术生成

在这里插入图片描述

存储过程

Mysql 储存过程是一组为了完成特定功能的 SQL 语句集,经过编译之后存储在数据库中,在需要时直接调用存储过程就像脚本语言中函数定义一样

-- 定义存储过程
\d //
create procedure p1()
begin
set @i=10;
while @i<90 do
insert into users values(null,concat('user:',@i),concat('user:',@i,'@qq.com'),concat('137013730',@i));
set @i=@i+1;
end while;
end;
//

执行储存:call p1()查看存储具体信息:show create procedure p1\G 删除触发器: drop procedure p1

应用场景:假设表中有千万条数据,在业务端需要进行分页显示,那么通常情况下是使用 limit 方式来完成,但是会不会出现 limit 9000000,10,这样做也没毛病此时还可以借助存储过程和游标来实现,在存储过程中去定义并使用游标来获取指定的数据

MySQL 的触发器

提前定义好一个或一组操作,在指定的 sql 操作前或后来触发指定的 sql 执行举例:定义一个 update 语句,在向某个表中执行 insert 添加语句时来触发执行,就可以使用触发器触发器就是 javascript 中的事件一样

格式:1、触发器的定义:

 CREATE TRIGGER trigger_name trigger_time trigger_event
   ON tbl_name FOR EACH ROW trigger_stmt
说明:
# trigger_name:触发器名称
# trigger_time:触发时间,可取值:BEFORE或AFTER
# trigger_event:触发事件,可取值:INSERT、UPDATE或DELETE。
# tb1_name:指定在哪个表上
# trigger_stmt:触发处理SQL语句。

-- 查看所有的 触发器
show triggers\G;

-- 删除触发器
drop trigger trigger_name;

触发器 Demo 注意:如果触发器中 sql 有语法错误,那么整个操作都会报错

-- 创建一个删除的触发器,在users表中删除数据之前,往del_users表中添加一个数据

-- 1,复制当前的一个表结构
create table del_users like users;

-- 2,创建 触发器 注意在创建删除触发器时,只能在删除之前才能获取到old(之前的)数据
\d //
create trigger deluser before delete on users for each row
begin
insert into del_users values(old.uid,old.uname,old.email,old.phone);
end;
//
\d ;

-- 3 删除users表中的数据去实验

用触发器来实现数据的统计

-- 1.创建一个表, users_count 里面有一个 num的字段 初始值为0或者是你当前users表中的count

-- 2,给users表创建一个触发器
-- 当给users表中执行insert添加数据之后,就让users_count里面num+1,
-- 当users表中的数据删除时,就让users_count里面num-1,
-- 想要统计users表中的数据总数时,直接查看 users_count

Mysql 中的视图

视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。

视图仅仅是用来查看存储在别处的数据的一种设施或方法。视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。在添加或更改这些表中的数据时,视图将返回改变过的数据。

因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。如果你用多个联结和过滤创建了复杂的视图或者嵌套了视图,可能会发现性能下降得很厉害。

视图的作用:1.重用 SQL 语句。2.简化复杂的 SQL 操作。在编写查询后,可以方便地重用它而不必知道它的基本查询细节。3.使用表的组成部分而不是整个表。4.保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。5.更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。注意:视图不能索引,也不能有关联的触发器或默认值。

创建视图:
mysql> create view v_t1 as select * from t1 where id>4 and id<11;
Query OK, 0 rows affected (0.00 sec)

view视图的帮助信息:
mysql> ? view
ALTER VIEW
CREATE VIEW
DROP VIEW

查看当前库中所有的视图
show tables; --可以查看到所有的表和视图
show table status where comment='view'; --只查看当前库中的所有视图

删除视图v_t1:
mysql> drop view v_t1;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值