我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mysql视图和触发器使用过程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mysql视图和触发器使用过程

视图

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

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

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

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

官方定义:

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

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

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

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

Mysql视图和触发器使用过程

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

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

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

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

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

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

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

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

Mysql视图和触发器使用过程

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

Mysql视图和触发器使用过程

如何创建视图?

create view view_name as (select 语句)

select语句可以是嵌套查询, 也可以是联表查询

创建之后相当于是如下:

Mysql视图和触发器使用过程

删除视图

drop view view_name;

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

Mysql视图和触发器使用过程

视图的用途?

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

Mysql视图和触发器使用过程

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

注意点

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

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

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

物化视图(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                -- 监控表
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,这个是我之前创建的触发器还没有删除, 不是出错了)

Mysql视图和触发器使用过程

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

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

Mysql视图和触发器使用过程

触发器是否具有事务性?

到此这篇关于Mysql视图和触发器使用过程的文章就介绍到这了,更多相关MySql视图触发器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mysql视图和触发器使用过程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Mysql视图和触发器使用过程

目录视图触发器视图视图是什么, 是否真实存在?个人理解:视图视图,只是你可以看见的一层抽象层, 它并不真实存在, 而是在真实存在的一张或者多张表之上的一层封装, 对于select查javascript询语句的提前封装. 不涉及数据的存储
2022-12-07

MySql视图触发器存储过程详解

视图:一个临时表被反复使用的时候,对这个临时表起一个别名,方便以后使用,就可以创建一个视图,别名就是视图的名称。视图只是一个虚拟的表,其中的数据是动态的从物理表中读出来的,所以物理表的变更回改变视图。创建:create view v1 as
2022-05-12

浅谈MySql 视图、触发器以及存储过程

视图什么是视图?视图的作用是什么? 视图(view)是一种虚拟存在的表,是一个逻辑表,它本身是不包含数据的。作为一个select语句保存在数据字典中的。 通过视图,可以展现基表(用来创建视图的表叫做基表base table)的部分数据,说白
2022-05-18

MySQL触发器使用过程详解

目录mysql—触发器创建触发器查看触发器删除触发器触发器优缺点MySQL—触发器​ 将两个关联的操作步骤写到程序里面,并且要用事务包裹起来,确保两个操作称为一个原子操作,要么全部执行,要么全部不执行​ 创建一个
2023-03-01

对比索引、视图、游标、存储过程和触发器

1、索引       1-1、索引的概述                我们把一个表中的一列或者多列和列中元素所在表中记录的物理地址组合成一个新的表。这个表的记录大致为列的内容和该列所在记录的物理地址。       1-2、索引的优缺点            
对比索引、视图、游标、存储过程和触发器
2020-01-22

在MySQL中如何使用存储过程和触发器

在MySQL中,可以使用存储过程和触发器来实现一些特定的功能。下面分别介绍如何创建和使用存储过程和触发器:存储过程:存储过程是一组为了完成特定任务的SQL语句集合,可以被存储在数据库中并在需要时调用执行。使用存储过程可以简化复杂的操作和提高
在MySQL中如何使用存储过程和触发器
2024-04-09

【2020Python修炼记】MySQL之 视图、触发器、事务、存储过程、函数

【目录】(其余均为了解知识)一 视图二 触发器三 事务(掌握)四 存储过程五 函数六 流程控制七、索引理论 一、视图1、什么是视图视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,
【2020Python修炼记】MySQL之 视图、触发器、事务、存储过程、函数
2018-03-18

MySQL 之视图、 触发器、事务、存储

本文内容:视图触发器事务存储过程内置函数流程控制索引----------------------------------------------------------------------------------------------
2023-01-31

查询代码在哪个视图、存储过程、函数、触发中使用过

工作中偶尔会出现:想用A数据表替换B数据表,然后把B数据表删除。但是,又不知道B数据表在哪个视图、存储过程、函数、触发器中使用过?    经过一番度娘,看到实现方法也不难,主要涉及两个系统表:sysobjects及syscomments。    1、先来复习一
查询代码在哪个视图、存储过程、函数、触发中使用过
2020-10-22

如何在MySQL中使用PHP编写触发器和存储过程

使用PHP在MySQL中编写触发器和存储过程,可提升数据库性能和灵活性。触发器在指定事件发生时自动执行,存储过程则用于执行复杂操作。使用PDO或MySQLi扩展可从PHP脚本中调用触发器和存储过程,实现数据验证、计算等功能。最佳实践包括仅在必要时使用、记录用途、定期审核,以确保效率和安全性。
如何在MySQL中使用PHP编写触发器和存储过程
2024-04-12

MySQL中的视图、存储函数、存储过程、触发器分别是什么

这篇文章主要讲解了“MySQL中的视图、存储函数、存储过程、触发器分别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL中的视图、存储函数、存储过程、触发器分别是什么”吧!目录一
2023-06-20

如何在MySQL中使用PHP编写触发器和存储过程

在MySQL中使用PHP编写触发器和存储过程可以通过以下步骤实现:1. 连接到MySQL数据库:使用PHP的`mysqli`或`PDO`扩展来连接到MySQL数据库。例如:```php$conn = new mysqli($serverna
2023-10-10

编程热搜

目录