MySQL存储过程,触发器,视图
什么是存储过程?
1、存储过程简单来说,就是为以后的使⽤⽽保存的⼀条或多条MySQL语句的集合。
2、储存过程是⼀组为了完成特定功能的SQL语句集,经过编译之后存储在数据库中,在需要时直接调⽤。
为什么要使⽤存储过程?
优点:
可以把⼀些复杂的sql进⾏封装,简化复杂操作
保证了数据的完整性,防⽌错误
简单的变动只需要更改存储过程的代码即可
提⾼性能。因为使⽤存储过程⽐使⽤单独的SQL语句要快。(预先编译)
缺点:
存储过程的编写⽐SQL语句复杂
⼀般可能还没有创建存储过程的权限,只能调⽤
创建存储过程
\d // 修改MySQL默认的语句结尾符 ; ,改为 // 。
create procedure 创建语句
BEGIN和END语句⽤来限定存储过程体
-- 定义存储过程
\d //
create procedure p1()
begin
set @i=10;
while @i<90 do
insert into users values(null,concat('user:',@i),@i,0);
set @i=@i+1;
end while;
end;
//
执⾏储存
call p1()
查看存储过程
show create procedure p1\G
删除存储过程
drop procedure p1
MySQL的触发器
定义:触发器是MySQL响应写操作(增、删、改)⽽⾃动执⾏的⼀条或⼀组定义在BEGIN和END之间的MySQL语句
可理解为:提前定义好⼀个或⼀组操作,在指定的SQL操作前或后来触发指定的SQL⾃动执⾏
触发器就像是JavaScript中的事件⼀样
触发器语法:
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;
触发器案例
注意:如果触发器中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 ;
-- 3 删除users表中的数据去实
在INSERT触发器代码内,可引⽤⼀个名为NEW的虚拟表,访问被 插⼊的⾏;
在DELETE触发器代码内,可以引⽤⼀个名为OLD的虚拟表,访问被删除的⾏;
OLD中的值全都是只读的,不能更新。
在AFTER DELETE的触发器中⽆法获取OLD虚拟表
在UPDATE触发器代码中
可以引⽤⼀个名为OLD的虚拟表访问更新以前的值
可以引⽤⼀个名为NEW的虚拟表访问新 更新的值
MySQL中的视图
视图是虚拟的表。与包含数据的表不⼀样,视图只包含使⽤时动态检索数据的查询。
视图仅仅是⽤来查看存储在别处的数据的⼀种设施或⽅法。
在添加或更改这些表中的数据时,视图将返回改变过的数据。
如果你⽤多个联结和过滤创建了复杂的视图或者嵌套了视图,可能会发现性能下降得很厉害。
视图的作⽤
- 重⽤SQL语句,可以⽅便地重⽤它⽽不必知道它的基本查询细节。
- 使⽤表的组成部分⽽不是整个表。
- 保护数据。可以给⽤户授予表的特定部分的访问权限⽽不是整个表的访问权限。
- 更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。
- 注意:视图不能索引,也不能有关联的触发器或默认值。
视图的基础语法
创建视图:
create view v_users as select id,name,age from users where age >= 25 and age
<= 35;
-- 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;
上一篇: 查询触发器及其相关的触发器函数与表
下一篇: 【MySQL】存储过程、触发器、视图