欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL存储过程、触发器、视图

程序员文章站 2022-06-04 08:41:36
...


MySQL存储过程、触发器、视图


一、存储过程

1.什么是存储过程?

  • ⽬前使⽤的⼤多数SQL语句都是针对⼀个或多个表的单条语句。并⾮所有操作都这么简单,经常会有⼀个完整的操作需要多条语句 才能完成。
  • 存储过程就像脚本语⾔中函数定义⼀样。
  • 储存过程是⼀组为了完成特定功能的SQL语句集,经过编译之后存储在数据库中,在需要时直接调⽤。

2.创建存储过程

\d // 修改MySQL默认的语句结尾符 ; ,改为 // 。
create procedure创建语句
begin 和 end 语句用来限定存储过程体

\d //
create procedure p1 (这里面可以根据需要可以放参数)
begin
set @i=10;
while @i<90 do
"这里写SQL语句"insert into users values(null,concat('user:',@i),@i,0);
set @i=@i+1;
end while;
end;
//

3.执行存储

call p1()

4.查看存储过程

show create procedure p1 \G

5.删除存储过程

drop procedure p1


二、触发器

  • MySQL语句在需要时被执⾏,存储过程也是如此。
  • 触发器是MySQL响应写操作(增、删、改)⽽⾃动执⾏的⼀条或⼀组定义在BEGIN和END之间的MySQL语句。
  • 就像JavaScript中的事件一样

1.触发器语法

 create trigger trigger_name trigger_time trigger_event on tbl_name for each row trigger_stmt
 # trigger_name: 触发器名称
 # trigger_time: 触发时间,取值:defore 或 after
 # trigger_event: 触发事件,取值 insert、delete、update
 # tbl_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.id,old.name,old.age,old.account);
end;
//
\d ;

tips:

在INSERT触发器代码内,可引⽤⼀个名为NEW的虚拟表,访问被 插⼊的⾏;

在DELETE触发器代码内,可以引⽤⼀个名为OLD的虚拟表,访问被删除的⾏;
OLD中的值全都是只读的,不能更新。
在AFTER DELETE的触发器中⽆法获取OLD虚拟表

在UPDATE触发器代码中
可以引⽤⼀个名为OLD的虚拟表访问更新以前的值
可以引⽤⼀个名为NEW的虚拟表访问新 更新的值;


三、视图

1.什么是视图

  • 视图是虚拟的表。与包含数据的表不⼀样,视图只包含使⽤时动态检索数据的查询。
  • 视图仅仅是⽤来查看存储在别处的数据的⼀种设施或⽅法。
  • 视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的
  • 在添加或更改这些表中的数据时,视图将返回改变过的数据。
  • 因为视图不包含数据,所以每次使⽤视图时,都必须处理查询执⾏时所需的任⼀个检索。
  • 如果你⽤多个联结和过滤创建了复杂的视图或者嵌套了视图,可能会发现性能下降得很厉害。

2.视图的作用

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

3.视图的基础语法

创建视图:

create view v_users as select id,name,age form users where age>=25 and age<=35;

vier视图的帮助信息

 mysql> ? view
 alter view
 create view
 drop view

查看当前库中所有的视图

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

删除视图 v_t1 :

drop view v_t1;