Mysql视图和触发器

news2024/10/6 1:47:23

视图

  • 视图是什么, 是否真实存在?

个人理解:视图视图,只是你可以看见的一层抽象层, 它并不真实存在, 而是在真实存在的一张或者多张表之上的一层封装, 对于select查询语句的提前封装. 不涉及数据的存储.

这样的一层封装好处是蛮多的. 对于复杂查询操作语句的简化  --- 方便后序使用.

安全性, 我们在使用视图 时,一般不会轻易通过视图对底层数据进行修改. 而且可以可以通过权限限制, 已得到更高的安全性.  

官方定义:

视图(view)是一种虚拟存在的表,是一个逻辑表(不涉及实际的存储),本身并不包含数据。其内容由查询定义。

基表:用来创建视图的表叫做基表;

通过视图,可以展现基表的部分数据;

视图数据来自定义视图的查询中使用的表,使用视图动态生成;

注意:   视图的修改可以映射到基表, 也就是说, 视图可以做到修改基表.   

这个很多时候容易想不明白. 视图只是一张虚拟表, 通过基表生成, 为什么我们还允许这张虚拟表数据的更改足以映射到基表?

针对单表映射而成的视图而言,  视图的修改可以映射到基表.   

同样, 基表数据的更改也会影响到视图. 毕竟对视图的各种操作也是映射到基表上面去的

其一,视图并不保存数据,  如果视图修改的数据并不能映射到基表, 那么修改的这个数据就无法存储下来.

其二,个人一个理解, 视图有些时候是更高层级的人维护, 创建出来给开发人员使用的, 开发人员的操作应该需要能映射到基表中. 为啥开发人员都只是看视图,而不是原表?  有些数据可能需要保密. 开发人员也只能查看部分. 

 测试: 视图和基表是否可以相互影响. 

视图的修改可以映射到基表, 验证如下.

 验证基表的修改是否会映射到视图 (也会)

  • 如何创建视图?

create view view_name as (select 语句)

select语句可以是嵌套查询, 也可以是联表查询
创建之后相当于是如下:

 删除视图

drop view view_name;

查看视图。 没有单独查看视图的命令, 直接查看表就会看到视图. 所以对于视图我们的命名还是可以给与区分一下

 

  • 视图的用途?

可复用,减少重复语句书写;类似程序中函数的作用。 比如联表查询语句. 组合成视图之后,简化了不要太多.

 逻辑更清晰,屏蔽查询细节,关注数据返回;

  • 注意点

视图不能添加索引,也不能有关联的触发器或者默认值

抓住视图并没有存储数据, 对视图的操作就是映射到对基表的操作, 视图可以简单理解为基表的一个简化对外显示。视图操作映射到基表, 基表操作也同样会影响视图. (关键就在于视图没有单独存储数据

还有另外一种视图, 叫做物化视图, 这种视图和普通视图不太一样的是. 物化视图是存储数据的, 而且物化视图数据的访问不是从基表, 而是直接从物化视图中读取数据的

物化视图(Materialized Views,以下简称 MV)是一种特殊的视图,它的数据会持久化。那么在查询 MV 时,并不会去访问基表,而是直接从 MV 里读数据。(可做了解)

触发器

  • 什么是触发器?

个人理解: 触发器就是一个条件触发,  事件触发.   和自动机, 状态机有点相似. 

有限自动机: 提前制定好条件, 以及条件满足时候的执行操作. 后面满足条件就会循环不断的自动执行相应的操作. 这个就是自动机了.  (其实本质也是一种条件触发)    同样触发器也是. 就像是回调机制, 同步操作. 

触发器就是指定在特定的sql DML操作发生之时在操作之前或者之后的瞬间接近同步的执行触发器指定的触发操作. 

官方定义:9

触发器(trigger)是MySQL提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表 事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比 如当对一个表进行DML操作( insert , delete , update )时就会激活它执行。

触发器关注要素:

  1. 监控的对象: table表
  2. 监控的事件类型: insert update delete
  3. 触发时机:before   after
  4. 指定触发事件: insert update delete
  • 怎么创建触发器?
create trigger trigger_name                
trigger_time monitor_trigger_event        -- 触发时机, 监控事件
on table_name for each row                -- 监控表
begin
     trigger_body;                        -- 正文, 触发事件
end

NEW && OLD (数据插入后的新表 删除后的旧表, 更新前后的新旧表)

  • insert类型触发器中:  New 用来表达即将(before)或者已经(after)插入的新数据;
  • delete类型触发器中:Old用来表达将要或者已经删除的旧的数据.
  • update类型触发器中: old表示原来的旧的数据, new表示新的更新的数据

用法:

new.colname  (新的数据的某一字段)

old.colname   (旧的原来的数据的某一字段)

  • 触发器用途 (应用场景)?

先准备两个表: 订单表和货物表

CREATE TABLE `order` (
	`id` INT PRIMARY KEY auto_increment,    -- 主键字段
	`goods_id` INT,                         -- 货物id, 外键字段
	`quantity` SMALLINT COMMENT '下单数量'   -- 下单数量
);

CREATE TABLE `goods` (
	`id` INT PRIMARY KEY auto_increment,   -- goods_id 货物主键字段
	`name` VARCHAR (32),                   -- 货物名称
	`num` SMALLINT DEFAULT 0               -- 货物数量
);

要求1: 

每当客户购买, 下单的时候,就自动跟新一下货物库存.  (客户下单, 触发货物库存更新操作)

-- 创建触发器
create trigger trig_order_4 -- 触发器名称 
after insert -- 触发器时机, 监控触发事件
on `order` for each row
begin
	update goods set num = num - new.quantity where id = new.goods_id; 
    -- 触发正文, 触发事件
end

Test: 测试 (id=1自动减少了2,这个是我之前创建的触发器还没有删除, 不是出错了)

反正就是, 如果是插入,可以通过插入的数据new表进行限定. 如果是删除操作可以用old表对删除数据进行指定, 如果是update操作, 可以用old对更新之前的数据指定和new更新之后的数据进行限定.

正好引入删除触发器 drop trigger trigger_name 删除;

触发器是否具有事务性?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/47314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kamiya丨Kamiya艾美捷小鼠转铁蛋白ELISA说明书

Kamiya艾美捷小鼠转铁蛋白ELISA预期用途: 小鼠转铁蛋白ELISA是一种高灵敏度的双位点酶联免疫分析(ELISA)小鼠生物样品中转铁蛋白的测定。仅供研究使用。 引言 转铁蛋白是一种金属结合蛋白,可逆地与血浆中的酸溶性铁结合。它的功…

python中json的使用dump,dumps,loads,load简单了解

参考:https://www.runoob.com/python3/python3-json.html,https://zhuanlan.zhihu.com/p/264393909 json的作用 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式 (图片是参考链接中的图片) json.dumps(): 对数据…

Node.js 入门教程 26 npm 依赖与开发依赖 27 Node.js 包运行器 npx

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录Node.js 入门教程26 npm 依赖与开发依赖27 Node.js 包运行器 npx27.1 轻松地运行本地命令27.2 无需安装的命令执行27.3 使用不同的 Node.js …

[SWPUCTF 2018]SimplePHP

考点&#xff1a;文件上传 试了一下&#xff0c;直接上传php文件是不行的&#xff0c;.user.ini和.htaccess也不行 能看到有提示&#xff0c;flag在f1ag.php中 在查看文件功能处发现get传参&#xff0c;可能是文件包含 尝试包含当前页面 ?filefile.php 得到 <?php h…

一些感悟(随笔小记)

不知不觉已经坚持快70天了&#xff0c;之前虽然断断续续学过几个月但是没有形成自己的体系&#xff0c;导师安排的各种任务和课程也极大的影响了自己自学的进度&#xff0c;当时真的很迷茫。好在因为那一股冲劲制定了百日救赎计划&#xff0c;虽然在庞大的知识体系中100天真的微…

精彩回顾 | 苏州农商银行新一代云原生信息科技架构体系实践

11月18日&#xff0c;2022年第五届中国金融科技产业大会暨第四届中新&#xff08;苏州&#xff09;数字金融应用博览会“基础软件与云原生系统软件”分论坛成功举办。该论坛由由中国计算机学会CTO CLUB&#xff08;苏州&#xff09;承办&#xff0c;江苏省金融科技云原生融合创…

【Kubernetes系列】工作负载资源之StatefulSet

StatefulSet概述解决的问题组件Pod 选择算符卷声明模板最短就绪秒数更新策略滚动更新分区滚动更新最大不可用 Pod强制回滚副本数StatefulSet的网络标识StatefulSet存储状态概述 StatefulSet 是用来管理有状态应用的工作负载 API 对象。 StatefulSet 用来管理某 Pod 集合的部署…

IDEA的乱码与file.encoding = UTF-8

file.encoding UTF-8的作用其实就是使用UTF-8作为文件encoding和decoding时的默认方案。 我们知道存储文本文件时&#xff0c;文本变为二进制时要对文件进行encoding&#xff0c;这是一个字节转字符的过程&#xff0c;转换的具体工作由JAVA的API完成&#xff08;例如&#xf…

ACM近年区域赛的所有题型

之前写了个退役文章记录想记录下&#xff0c;但是没有干货&#xff0c;还是给删了&#xff0c;所以前面的是退役小记&#xff0c;后面是我个人写近2年所有区域赛场次记录的题型 目录 退役小记&#xff08;没兴趣可以不看&#xff09; 这里简单记下我的acm生涯 省赛和三场区…

MySQL第一弹

目录 一、数据库的基本概念 1、数据 (Data) 2、表 3、数据库 4、数据库管理系统(DBMS) 5、数据库系统 6、DBMS的工作模式如下 二、数据库的发展史 1.第一代数据库&#xff08;淘汰&#xff09; 2.第二代数据库&#xff08;现在用的基本上都是二代&#xff09; 3.第…

Netty02——Netty 入门

目录1.概述1.1.Netty 是什么&#xff1f;1.2.Netty 的作者1.3.Netty 的地位1.4 Netty 的优势2. Hello World2.1 目标2.2 服务器端2.3 客户端2.4 流程梳理2.5.提示3. 组件3.1 EventLoop3.1.1.概述3.1.2.案例演示3.2 Channel3.2.1.ChannelFuture3.2.2.CloseFuture3.2.3.异步提升的…

火车头采集无分页列表-滚动加载列表采集软件免费

互联网的信息和数据不断攀升&#xff0c;每个人都离不开数据的汇总以及分析&#xff0c;不管是整理数据&#xff0c;还是分析同行的数据。今天小编就教大家如何有效地快速抓取自己想要的网页数据。 不管是列表页的网站&#xff0c;还是滚动加载的网站或者需要登录才能采集的网站…

终于学完了9年资深工程师推荐的Java项目化程序设计案例文档

时间飞逝&#xff0c;转眼间毕业七年多&#xff0c;从事 Java 开发也六年了。我在想&#xff0c;也是时候将自己的 Java 整理成一套体系。 这一次的知识体系面试题涉及到 Java 知识部分、性能优化、微服务、并发编程、开源框架、分布式等多个方面的知识点。 写这一套 Java 面试…

时间序列:时间序列模型---随机游走过程(The Random Walk Process)

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 随机游走过程是一种特殊的ARMA序列。从分子运动到股价波动等现象都被建模为随机游走。 随机游走过程是AR(1)序列&#xff0c;而且,时间序列在时刻的值为&#xff1a; 随机游走过程本质上是到当前时间…

【ZYNQ】IP核_DDR4_SDRAM(MIG)的详细介绍

IP核_DDR4_SDRAM的详细介绍内核架构内存控制器本机接口控制与数据路径控制路径数据路径读写合并重新排序组状态机ECCRMW(Read-Modify-Write)流程ECC模块ERROR地址时延ECC端口描述地址奇偶校验Clamshell 拓扑迁移功能MicroBlaze MCS ECCMemory 设置内核设计时钟复位协议描述用户…

libxlsxwriter初体验

C如何写Excel&#xff1f; 大家时间都这么宝贵&#xff0c;没有起因的问题是不值得被优先研究的。这篇博客的起因就是希望找到一个比较合适于C的开源库&#xff0c;用以在C中生成Excel文档。其实C可用的开源Excel库&#xff0c;很多博主都已经撰文提及。例如&#xff1a;# c操…

独立站运营优化方法

一个跨境卖家出海&#xff0c;除了建立独立站&#xff0c;要考虑的核心问题是引流和转型。独立站流量从哪里来&#xff1f;面对多元化的海外市场&#xff0c;如何选择更适合品牌的引流渠道和方式&#xff1f; 米贸搜在与海外主流社交媒体、搜索引擎深度连接的基础上&#xff0…

智翔金泰IPO过会:持续经营风险遭质疑,蒋仁生为实际控制人

11月28日&#xff0c;上海证券交易所科创板上市委员会2022年第 99次审议会议召开&#xff0c;重庆智翔金泰生物制药股份有限公司&#xff08;下称“智翔金泰”&#xff09;首发符合发行条件、上市条件和信息披露要求&#xff0c;即获得上市委会议通过。 据了解&#xff0c;上市…

目标检测数据标注项目分析-产品缺陷检测

什么是生产过程中的产品缺陷检测? 生产过程中的缺陷检测是保证产品质量的重要环节。及时发现故障或缺陷&#xff0c;并采取适当的措施&#xff0c;我们可以降低运行和质量相关的风险。但在一般视觉系统中&#xff0c;每个缺陷都必须经过检查及预处理才能被检测到&#xff0c;…

vue Router

Vue项目各文件含义 1.src文件夹 是我们真正敲代码的文件夹&#xff0c; 2.assets放静态资源 3.components放组件 4.App.vue主组件 5.main.js项目的入口文件 Vue Router 在router/index.js路由文件中配置路由&#xff0c;设置路由跳转规则 import Vue from vue import Vu…