mysql视图,触发器,存储过程优缺点及应用分析
mysql视图,触发器,存储过程优缺点及应用分析
视图
mysql使用较少,是sql server和orcale使用多
-
create view 视图名 as 查询语句
-
create view user_view as select name,id from user;
-
select * from user_view; //查询视图,查询视图的结果和视图绑定的语句返回的数据相同
-
修改视图数据 update user_view set username='two' where id=2;
-
视图保存了sql逻辑,并没有保存真实的数据,数据还是从数据表获取的
-
drop view view_name
-
建立视图时,最后增加with check option,在插入数据时,需要满足视图条件才允许操作
-
-
优点
-
简化操作,可以把复杂的sql进行封装,使用起来简单
-
降低耦合,只需要修改视图,不需要修改代码中的sql语句
-
安全,可以隐藏某些字段
-
create view a as select name,id,age from user;
-
操作a视图时,只能得到name,id,age字段 select name from a; 视图中没有select的字段也不能修改、排序、group by等,例如 select commit from a; 会报错,没有commit字段
-
create view custom_view as select * from user group by id; 然后update custom_view set name=1 where id=1; 会报错,custom_view不可更新
-
-
-
缺点
-
数据库发生改变,视图需要手动修改
-
不易于维护
-
触发器
针对写操作(insert,delete,update),去触发事件,例如写一张表的时候去更新另一张表
-
create trigger 触发器名 触发时间(after、before) 触发事件(insert,delete,update) on table for each row begin 方法体 end; for each row表示行级触发
-
create trigger user_trigger after insert on
userfor each row begin insert test vales(1,2) end; -
drop trigger user_trigger;
-
一个事件只能增加一个触发器
-
show triggers 查看所有的触发器创建信息
-
-
缺点
-
批量操作不适用
-
触发器错误不易定位
-
-
优点
存储过程
对mysql并不友好,sqlserver和orcale支持更好,sqlserver期望所有业务都交由存储过程来实现
- create procedure 存储过程名(参数列表) begin 方法体 end
-- in表示输入,out表示输出,inout即表示输入又表示输出
create procedure user_procedure(in x int,out y varchar(25))
begin
-- into代表将结果存入到y
select username into y from user where id=x;
end
-
call user_procedure(1,@a); 调用
-
drop procedure procedure_name;
-
select @a; 搜索输出
-
优点
-
执行块,存储过程会预编译,第一次运行存储过程会进行编译,再次次奥用不会再经过sql解释器
-
安全性高
-
-
缺点
-
不便维护
-
移植性差,不好调试,也不易扩展
-