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
user
for each row begin insert test vales(1,2) end; - drop trigger user_trigger;
- 一个事件只能增加一个触发器
- show triggers 查看所有的触发器创建信息
- create trigger user_trigger after insert on
-
缺点
- 批量操作不适用
- 触发器错误不易定位
- 优点
存储过程
对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解释器
- 安全性高
-
缺点
- 不便维护
- 移植性差,不好调试,也不易扩展
51 声望
1 粉丝
推荐阅读
faceswap换脸程序安装及使用
faceswap简介faceswap是一个开源的视频换脸软件,基本需要三个步骤,1.将视频切割成图片,并进行人脸提取 2.样本训练 3.换脸faceswap安装(windows环境)依赖安装anaconda 需要先安装conda,用于python的虚拟环境...
mafa1993阅读 1.4k
万字长文~vue+express+mysql带你彻底搞懂项目中的权限控制(附所有源码)
所谓的权限,其实指的就是:用户是否能看到,以及是否允许其对数据进行增删改查的操作,因为现在开发项目的主流方式是前后端分离,所以整个项目的权限是后端权限控制搭配前端权限控制共同实现的
水冗水孚赞 11阅读 1.6k
花了几个月时间把 MySQL 重新巩固了一遍,梳理了一篇几万字 “超硬核” 的保姆式学习教程!(持续更新中~)
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
民工哥赞 11阅读 1.2k
一次偶然机会发现的MySQL“负优化”
今天要讲的这件事和上述的两个sql有关,是数年前遇到的一个关于MySQL查询性能的问题。主要是最近刷到了一些关于MySQL查询性能的文章,大部分文章中讲到的都只是一些常见的索引失效场合,于是我回想起了当初被那个...
骑牛上青山赞 8阅读 2.3k评论 2
初学后端,如何做好表结构设计?
这篇文章介绍了设计数据库表结构应该考虑的4个方面,还有优雅设计的6个原则,举了一个例子分享了我的设计思路,为了提高性能我们也要从多方面考虑缓存问题。
王中阳Go赞 4阅读 917评论 2
2023最新MySQL高频面试题汇总
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~
程序员大彬赞 4阅读 1k
Mysql 数据库的批量插入或更新(Upsert)
这个问题已经困扰我一段时间了,对于大量数据的插入或更新,批量操作肯定比每条记录调用一次快得多,新数据可以用 insert 批量插入,老数据可以用 replace into 批量更新。但如果不知道数据是否存在(是否有唯一k...
songofhawk赞 2阅读 2.6k
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。