Mysql视图和触发器
视图
- 视图是什么, 是否真实存在?
个人理解:视图视图,只是你可以看见的一层抽象层, 它并不真实存在, 而是在真实存在的一张或者多张表之上的一层封装, 对于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 )时就会激活它执行。
触发器关注要素:
- 监控的对象: table表
- 监控的事件类型: insert update delete
- 触发时机:before after
- 指定触发事件: insert update delete
- 怎么创建触发器?
create trigger trigger_name
trigger_time monitor_trigger_event -- 触发时机, 监控事件
on table_name for each row -- 监控表
begintrigger_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
beginupdate 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 删除;
触发器是否具有事务性?
Mysql视图和触发器相关推荐
- mysql视图存储过程触发器
以下笔记借鉴于黑马MYSQL视频,记录为个人学习笔记参考. 包含视图/存储过程/触发器等概念 目录 视图 view 语法 视图的检查选项 视图更新 作用 存储过程 procedure 语法 变量 系统 ...
- mysql:视图,触发器,事务,存储过程,函数
一.视图 视图是一个虚拟表并不是(正实存在的) 创建老师表create table teacher( id int primary key auto_increment, tname varchar( ...
- 【MySQL | 进阶篇】05、MySQL 视图、触发器讲解
目录 一.视图 1.1 介绍 1.2 语法 1.2.1 演示示例 1.3 检查选项 1.3.1 CASCADED 级联 1.3.2 LOCAL 本地 1.3.3 示例演示 1.4 视图的更新 1.4. ...
- MySQL视图/存储器/触发器
菜鸡自用 orz 视图 视图的定义 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列 数据来自由定义视图 ...
- mysql七:视图、触发器、事务、存储过程、函数
阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名 ...
- mysql命令行查看表的触发器_Mysql事项,视图,函数,触发器命令(详解)
事项开启和使用 //修改表的引擎 alter table a engine=myisam; //开启事务 begin; //关闭自动提交 set autocommit=0; //扣100 update ...
- mysql存储过程输入参数拆分_一文看懂mysql数据库存储过程、函数、视图、触发器、表...
概述 抽空总结一下mysql的一些概念性内容,涉及存储过程.函数.视图.触发器等. 一.查看存储过程.函数.视图.触发器.表 1.存储过程 select * from mysql.proc where ...
- MySQL中视图和触发器学习
创建视图的语法: 其中,algorithm是可选参数,表示视图选择的算法,它有三个选项:undefined,merge,temptable.Undefined表示让MySQL自动选择所要使用的算法:m ...
- mysql视图执行原理_MySql中的视图 触发器 存储过程,以及事物
视图: 一个临时表被反复使用的时候,对这个临时表起一个别名,方便以后使用,就可以创建一个视图,别名就是视图的名称.视图只是一个虚拟的表,其中的数据是动态的从物理表中读出来的,所以物理表的变更回改变视图 ...
最新文章
- php的匿名函数和闭包函数
- ZedGraph在Asp.net中的应用
- 数据库:悲观锁与乐观锁
- 用C/C++扩展你的PHP
- 一道小时候经常玩的数字游戏
- 消息中间件--RabbitMQ ---高级特性之消费端ACK与重回队列
- poll函数_如何理解IO多路复用的三种机制Select,Poll,Epoll?
- 21天Jmeter打卡合集之从入门到精通
- Git从远程主分支切换出一个开发分支
- 【LTspice仿真软件】如何从官网下载软件和入门到精通的教程
- SpringBoot整合Redis
- 计算机链接与rtu通讯的区别,RTU
- matlab仿真电子秤,基于51单片机电子秤的代码
- 引导扇区维护工具linux,bootice引导扇区维护工具(bootice1.3.4新版及1.3.3经典版)...
- 使用H-lua框架制作魔兽争霸地图(8-物编-物品绑定技能篇1)
- TopCoder 2019线下比赛
- 大数据工程专业技术证书考试-数据分析与应用
- 【数理逻辑三】命题逻辑及形式系统【下】
- VSCode按ctrl与鼠标左键无法实现跳转的解决办法
- 计算机win是什么键,Windows键是哪个 电脑上的Win键在哪?【图文】