MySQL视图、触发器
一、视图
1.什么是视图?
SQL语句的执行结果是一张虚拟表 我们可以基于该表做其他操作
如果这张虚拟表需要频繁使用 那么为了方便可以将虚拟表保存起来 保存起来之后就称之为"视图"(本质就是一张虚拟表)
2.为什么要有视图?
如果要频繁使用一张虚拟表,可以不用重复查询
3.如何使用视图?
正常情况下俩张表连接情况(拼接)查询
select * from userinfo inner join department on userinfo.dep_id = department.id
使用内连接:
inner join:连接俩表中都存在的数据
userinfo(用户表) department(部门表)
"""
1、在硬盘中,视图只有表结构文件,没有表数据文件(视图数据来源与dep与emp文件,来源于创建的表文件)
2、视图通常是用于查询,尽量不要修改视图中的数据
总结:视图能尽量少用就尽量少用
"""

4.反复拼接的繁琐(引入视图的作用)
它的繁琐之处就在于当我们频繁的去查询连表,反复拼接,会出现繁琐的现象,影响效率
5.解决方法
如果要频繁的使用一张虚拟表,可以不用重复查询,而使用视图来进行操作,将拼接的连表保存起来
二、视图的应用
1.创建与删除视图的格式
创建视图:
create view 创建视图名字 as 执行连表的SQL语句;
删除视图:
drop view 视图名字;
使用删除视图:
deop view 视图名字;
'''
注意:
当字段名相同时时,会产生冲突,导致无法建立视图。
修改字段名:
alter table <表名> change <字段名> <字段新名称> <字段的类型>;
'''

2.查询视图层
select * from depart_user;

3.查询navicat视图层位置

4.开发过程中为什么不会使用视图?
视图是mysql的功能,如果你的项目里大量使用了视图,那么意味着,你后期想要扩展某个功能的时候这个功能恰巧又需要对视图进行修改,意味着你需要在MySQL这边将视图修改一下,然后再去应用层修改对应的SQL语句,这就涉及到跨部门沟通的问题,所有通常不会使用视图,而是通过重新修改sql语句来扩展功能。
关于视图做了解即可,尽量不要使用,因为在使用的时候它只是拿来看的,并不能修改里面的数据,如果使用者使用了视图去修改数据那么就会报错,可能使使用者不清楚为什么报错造成了混淆,并且视图创建多了的话会占有硬盘空间,但是在navicat中会有表与视图的区分

三、触发器
1.什么是触发器?
在满足对某张表数据的增、删、改的情况下,自动触发的功能称之为触发器
2.为何要有触发器?
触发器专门争对我们对某一张表的增insert、删delete、改update的行为,这类行为一旦执行就会触发触发器的执行,即自动运行另外sql语句
3.触发器的触发条件以及语法
针对表数据的增、改、删自动触发的功能(增前、增后、改前、改后、删前、删后)
语法结构:
create trigger 触发器的名字 before/after insert/update/delete on 表名 for each row
begin
sql语句
end
4.触发器名字在命名的时候推荐使用下列的方式(见名知意)
tri_after_insert_t1 tri_before_delete_t1
5.注意事项(临时更换结束符)
在书写sql代码的时候结束符是; 而整个触发器的结束符也是;
这就会出现语法冲突 需要我们临时修改结束符号
临时修改结束符格式:
delimiter 名字
delimiter $$
临时修改sql语句结束符,该语法只在当前窗口有效
6.触发器三种状态(六种演示)
增加:
create trigger tri_after_insert_t1 after insert on 表名 for each row
begin
sql语句
end # 增加之后触发
create trigger tri_before_insert_t1 before insert on 表名 for each row
begin
sql语句
end # 增加之前触发
修改:
create trigger tri_after_update_t1 after update on 表名 for each row
begin
sql语句
end # 修改之后触发
create trigger tri_before_insert_t1 before insert on 表名 for each row
begin
sql语句
end # 修改之前触发
删除:
create trigger tri_after_delete_t1 after delete on 表名 for each row
begin
sql语句
end # 删除之前触发
create trigger tri_before_delete_t1 defore delete on 表名 for each row
begin
sql语句
end # 删除之后触发
四、触发器的实战案例
1.创建cmd命令表与报错日志、创建触发器、插入数据
# 模拟cmd命令表
CREATE TABLE cmd (
id INT PRIMARY KEY auto_increment,
USER CHAR (32),
priv CHAR (10),
cmd CHAR (64), # cmd命令字段
sub_time datetime, # 提交时间
success enum ('yes', 'no') #0代表执行失败
);
# 报错日志表
CREATE TABLE errlog (
id INT PRIMARY KEY auto_increment,
err_cmd CHAR (64),
err_time datetime
);
----------------------------创建触发器------------------------------
1.创建之前修改结束符
delimiter $$ # 将mysql默认的结束符由;换成$$
# 创建触发器
create trigger tri_after_insert_cmd after insert on cmd for each row
begin
# 触发器启动 判断cmd中success字段内容记录是否为no,为no则执行以下代码
if NEW.success = 'no' then # 新记录都会被MySQL封装成NEW对象
insert into errlog(err_cmd,err_time) values(NEW.cmd,NEW.sub_time);
end if;
end $$
2.创建之后修改结束符
delimiter ; # 结束之后记得再改回来,不然后面结束符就都是$$了。
-----------------------------插入数据--------------------------------
#往表cmd中插入记录,触发触发器,根据IF的条件决定是否插入错误日志
INSERT INTO cmd (
USER,
priv,
cmd,
sub_time,
success
)
VALUES
('tony','0755','ls -l /etc',NOW(),'yes'),
('tony','0755','cat /etc/passwd',NOW(),'no'),
('tony','0755','useradd xxx',NOW(),'no'),
('tony','0755','ps aux',NOW(),'yes');
2.验证触发器(查询结果)
查询errlog表记录
select * from errlog;
解析:
1.当cmd命令行后台被插入数据时,if判断出现为‘on’ 报错的数据时
2.会自动触发 触发器会执行代码,将为‘on’错误代码 插入到《errlog报错日志》

3.查看触发器
查看触发器:
show triggers\G; # 格式化展示
删除触发器:
drop trigger tri_after_insert_cmd;

MySQL视图、触发器的更多相关文章
- mysql 视图 触发器 存储过程 函数事务 索引
mysql 视图 触发器 存储过程 函数事务 索引 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当 ...
- Mysql 视图,触发器,存储过程,函数,事务
视图 视图虚拟表,是一个我们真实查询结果表,我们希望将某次查询出来的结果作为单独的一个表,就叫视图,无法对图字段内容进行增删改. --格式: CREATE VIEW 视图名字 AS 操作; --比如: ...
- python mysql 视图 触发器 事物 存储过程 用户授权 数据备份还原
###################总结########### 视图是一个虚拟表(非真实存在) 是跑在内存中的表,真实表是在硬盘上的表 使用视图我们可以把查询过程中的临时表摘出来,保存下来,用视图去 ...
- mysql 视图 触发器 事物 存储过程 函数 流程控制
1.视图 *** 视图是有一条sql语句的查询结果构成的虚拟表 其不是物理存在的 使用方式与普通表相同 视图的作用1.简化sql语句的编写 2.限制可以查看的数据 可以使用权限来完成 权限某一个库 的 ...
- mysql视图 触发器 事物 函数 存储过程
一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...
- MySQL 视图触发器事务存储过程函数
事务 致命三问 什么是事务:开启了一个包含多条SQL语句的事务,这些SQL语句要么都执行成功,要么有别想成功:例如A向B转账,二人账户并不属于一家银行,在转账过程中由于网络问题,导致A显示转账 成功 ...
- MySQL 视图 触发器 事务 存储过程 函数 流程控制 索引与慢查询优化
视图 1.什么是视图? 视图就是通过查询得到的一张虚拟表,然后保存下来,下次可直接使用 2.为什么要使用视图? 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图? create view ...
- MySQL——视图/触发器/事务/存储过程/函数/流程控制
一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...
- MySQL视图,触发器,事务,存储过程,函数
create triggr triafterinsertcmdlog after insert on cmd_log FOR EACH ROW trigger_body .#NEW : 代表新的记录 ...
- mysql 视图/触发器/函数
一.视图 作用:简写代码,与临时表的作用差不多 .创建 create view 视图名 as SQL语句 .修改 alter view 视图名 as 新SQL语句 .删除 drop view 视图名 ...
随机推荐
- C#判断当前时间是否在规定时间段范围内(二维数组超简版)
直接上C#代码 TimeSpan nowTime = DateTime.Now.TimeOfDay; string[,] arr = { { "7:50", "8:10& ...
- 数据分析必备:GPS轨迹、软件签到、手机信令数据获取方式合集
本文对目前主要的出租车.公交车.行人GPS轨迹.社交软件签到.手机信令等数据产品的获取网站加以整理与介绍. 目录 6 GPS轨迹与签到数据 6.1 个人GPS轨迹数据 6.1.1 GeoLife ...
- FastAPI访问令牌的权限声明与作用域管理:你的API安全真的无懈可击吗?
title: FastAPI访问令牌的权限声明与作用域管理:你的API安全真的无懈可击吗? date: 2025/06/15 06:32:07 updated: 2025/06/15 06:32:07 ...
- [书籍精读]《CSS世界》精读笔记分享
写在前面 书籍介绍:本书从前端开发人员的需求出发,以"流"为线索,从结构.内容到美化装饰等方面,全面且深入地讲解前端开发人员必须了解和掌握的大量的CSS知识点.同时,作者结合多年的 ...
- 重磅预告 | 开源家族又添新成员!12月16日Molecule在Github、Gitee等你
随着全球开源生态的持续性发展,开源项目数量呈现指数级的增长,并逐渐覆盖全栈技术领域.袋鼠云数栈技术开源团队一直秉承着"源于开源 回馈开源"的理念,坚持以技术为核心,开源开放.不 ...
- 使用acme.sh颁发TLS证书并安装到nginx/apache实现网站https访问
原文永久链接:https://forum.piwind.com/d/22-shi-yong-acmeshban-fa-tlszheng-shu-bing-an-zhuang-dao-nginxapac ...
- 扎“芯”了——CP探针卡的国产替代道阻且长
这是IC男奋斗史的第19篇原创 关注公众号[IC男奋斗史],让我们一起撸起袖子加油干! 本文3810字,预计阅读10分钟. 之前在<凤姐如何变冰冰?>这篇文章中杰哥有介绍过CP测试,也提到 ...
- 我的grunt 插件
"angular-ui-router": "^0.2.18", "grunt": "^0.4.5", "gru ...
- DotNetCore 提示 系统不支持“big5”编码。System does not support 'big5' encoding.
C# .NET Core 以 Big 5 (大五碼)編碼格式讀取檔案 (ruyut.com) C# .NET Core 以 Big 5 (大五碼)編碼格式讀取檔案 日期: 4月 27, 2022 之前 ...
- dotNet6(.net core 6) Big5'不是受支持的编码名称。有关定义自定义编码的信息,请参阅有关编码的文档。RegisterProvider方法
https://www.skyfinder.cc/2021/12/17/net-core-register-encoding/#:~:text=%E5%9C%A8%E4%BD%BF%E7%94%A8. ...