Mysql视图和触发器
创始人
2024-03-02 05:20:41
0

视图

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

个人理解:视图视图,只是你可以看见的一层抽象层, 它并不真实存在, 而是在真实存在的一张或者多张表之上的一层封装, 对于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                -- 监控表
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 删除;

触发器是否具有事务性?

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...