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

news/2024/5/19 21:29:07 标签: java, 排序算法, 快速排序

目录

    • 视图
      • 使用
      • 注意事项
    • 存储过程
      • 使用
    • 触发器
      • 使用

视图

视图是MySQL中的一个虚拟表的概念,类似于一个SQL语句的查询结果,它提供了从某一视角来看表的类型;将
一个表中不该显示的数据或列剔除;而得到自己想要的数据;
视图一般应用于简化复杂的SQL语句,比如在需要大量使用一些复杂多个条件的查询时,建立符合其中条件的SQL语句显示的视图,可以快速的将视图的SQL语句进行一个复用,即只需要从视图中获取数据即可;

另外,除了简化复用SQL语句,它还对于原来的数据表起了一个保护作用,视图可以返回和原表数据格式不相同的数据,通过设置还可让用户对视图的操作不影响源数据表;

使用

  1. 使用CREATE VIEW [view_name] as [SQL语句];来创建视图;
  2. 使用SHOW CREATE VIEW 【视图名】;来查看视图创建语句;
  3. 使用DROP VIEW [view_name]删除视图;
  4. 使用Create OR REPLACE VIEW [view_name];来更新视图;

一个常见的应用时简化复杂的SQL语句;
假如有一多表联查的SQL,可以通过一次对于该SQL的视图创建;后续只需要直接将视图当结果表来操作即可;
另一个作用是可以通过视图来得到原来的结果:比如结果数据的筛选,数据计算和格式化因为不影响原表,所以甚至可以进行更多操作;

注意事项

视图本身不包含数据,它的数据都是原数据表中的数据,对于源数据表的更改会影响到视图,而且由于每次使用都要检索,尽量不要建立复杂的视图;

视图的一些使用规范:

  • 视图必须唯一命名;
  • 创建视图数量没有限制,但是必须对原表有足够的访问权限;
  • 视图可以嵌套使用,也可以和表一起结合使用;
  • 视图无法索引,也不能有触发器关联或默认值;

存储过程

对于项目中的数据库操作,可能不知一条语句,存储过程就是一组SQL语句的集合;执行一个存储过程就相当于执行了一组SQL语句;

使用场景:

  • 通过将一组处理封装成一个存储过程从而简化复杂操作;
  • 封装好的语句使用会避免一些多次编写过程中不必要的错误,提供语句一致性,更改表名时也不需要注意SQL语句,只需要修改存储过程即可;
  • 提高性能,它比一组SQL执行要快;

使用

创建:CREATE PROCEDURE [名称(参数)] begin ……end;来创建一个存储过程;其中begin后面时SQL语句集

CREATE PROCEDURE productpricing(
   OUT pl DECIMAL(8,2),
   OUT ph DECIMAL(8,2),
   OUT pa DECIMAL(8,2)
)
BEGIN
   SELECT Min(prod_price)
   INTO pl
   FROM products;
   SELECT Max(prod_price)
   INTO ph
   FROM products;
   SELECT Avg(prod_price)
   INTO pa
   FROM products;
END;

使用:CALL 存储过程名(存储过程参数);来使用一个已经创建好的SQL语句;
删除:DROP PROCEDURE 【过程名称】IF EXISTS;

查看已有的存储过程:SHOW CREATE PROCEDURE

使用过程中也可以结合游标使用更多功能;

触发器

触发器主要用于需要自动在某些条件下执行SQL语句的情况;MySQL中的触发器主要用于数据更改时使用(DELETE、INSERT、UPDATE);

使用

创建:

CREATE TRIGGER [触发器名称]
 AFTER/BEFORE
ON [关联表名]      (  FOR EACH ROW )   [SQL语句];

注意:视图不支持触发器,如果BEFORE失败即SQL语句失败,则不会请求,且每个事件只能由一个触发器;

删除:
DROP TRIGGER [名称]
触发器无法修改,只有增删;如果要修改只能先删除在创建;

INSERT触发器
CREATE TRIGGER neworder AFTER INSERT ON orders
FOR EACH ROW SELECT …………
- 在INSERT 触发器代码内,可引用一个名为NEW 的虚拟表,访问被插入的行;

- 在BEFORE INSERT 触发器中,NEW 中的值也可以被更新(允许更改被插入的值);

- 对于AUTO_INCREMENT 列,NEW 在INSERT 执行之前包含0 ,在INSERT 执行之后包含新的自动生成值。

DELETE触发器
CREATE TRIGGER deleteorder BEFORE DELETE ON orders
FOR EACH ROW …………
- 在DELETE 触发器代码内,你可以引用一个名为OLD 的虚拟表,访问被删除的行;

- OLD 中的值全都是只读的,不能更新。

UPDATE 触发器
CREATE TRIGGER updatevendor BEFORE UPDATE ON vendors
FOR EACH ROW …………
- 在UPDATE 触发器代码中,你可以引用一个名为OLD 的虚拟表访问以前(UPDATE 语句前)的值,引用一个名为NEW 的虚拟表访问新更新的值;

- 在BEFORE UPDATE 触发器中,NEW 中的值可能也被更新(允许更改将要用于UPDATE 语句中的值);

- OLD 中的值全都是只读的,不能更新。

触发器的创建需要安全访问权限,执行是自动的;
触发器可以用于保证数据一致性和创建审计跟踪;


http://www.niftyadmin.cn/n/1020478.html

相关文章

sumblime快捷键

原文地址:https://blog.csdn.net/shutfuckingup/article/details/23846603 CtrlD 选词 (反复按快捷键,即可继续向下同时选中下一个相同的文本进行同时编辑)CtrlG 跳转到相应的行CtrlJ 合并行(已选择需要合并的多行时&a…

多麦克风做拾音的波束_语音交互:先从麦克风阵列聊起

随着智能音箱、智能家居等智能硬件的普及,语音交互热度也不断飙升。想要了解语音交互,第一步是了解麦克风阵列,本文从概念、分类、作用几个方面对麦克风阵列展开了说明,与大家分享。语音交互从亚马逊音箱(Echo)诞生的那一刻&#…

spring mvc:输出json,输出多个json

spring mvc:输出xml/输出json 用到的注解ResponseBody ResponseBody用来输出json/xml等格式数据&#xff08;非html&#xff09; controller输出用到的类 org.springframework.web.bind.annotation.ResponseBody 需要bean解析支持 <!-- bean视图解析 --> <bean cla…

MySQL中innodb体系结构和特性研究

目录简介1、innodb体系结构是怎样的&#xff1f;2、innodb的线程3、如何理解innodb的内存4、innodb如何保证缓冲池和磁盘上的数据一致5、innodb的一些关键特性插入缓冲两次写自适应hash索引异步IO刷新邻接页简介 MySQL的体系结构可以分为连接层和服务层&#xff1b;连接层主要…

python包管理工具 ports_Python无法识别MacPorts安装的包

提前感谢您的建议&#xff01;在背景&#xff1a;相对于这个网站上的人&#xff0c;我对编程还是个新手&#xff0c;尽管做了一些研究&#xff0c;但我不熟悉使用Unix类型的shell&#xff0c;不熟悉管理包真正涉及的内容&#xff0c;或者不熟悉在“Dr.Java”IDE或defaultr GUI之…

MySQL索引、事务常见的一些问题总结

目录1、索引是什么&#xff1f;如何分类&#xff1f;2、索引的设计原则&#xff1f;3、B树&#xff1b;4、索引的存储设计5、为什么需要使用整形自增作为主键&#xff1f;6、什么时候索引会失效索引的一些使用上的问题7、事务是什么&#xff0c;事务的ACID特性8、事务的分类9、…

手写数字识别

四、 任务分析 sklearn.neighbors模块实现了k-近邻算法。如图1所示。 图1 sklearn.neighbors模块KNeighborsClassifier函数有8个参数。如图2所示。 图2 参数n_neighbors: int&#xff0c;可选&#xff0c;默认值为5&#xff0c;最近的k个点 weights: 权重&#xff0c;默认是uni…

kickstart自动化系统安装_利用Kickstart自动化安装CentOS的教程

前言因为需要在浪潮的x86服务器中集中部署CentOS搭建基于Hadoop的大数据平台&#xff0c;平时接触SLES(SuSE Linux Enterprise Server)较多并且已经实现基于Autoyast方式使用光盘或者PXE网络自动化安装(后续会分享具体实现方法)。这次主要通过学习Kisckstart实现最简单的光盘方…