MySQL视图-触发器
一:视图
1.什么是视图?
视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可。
2.为什么要用视图?
如果要频繁使用一张虚拟表,可以不用重复查询。
3.如何使用视图
正常两张表连接情况(拼接)查询
select * from emp inner join dep on emp.id=dep.id;
使用内连接:
inner join : 连接两表中都存在(对应关系)的数据
dep : 部门表 emp : 员工详细表
4.反复拼接的繁琐(引入视图的作用)
反复拼接繁琐之处:
当我们频繁的去查询连表,反复拼接,会出现繁琐的现象,影响效率。
5.解决方法
如果要频繁使用一张虚拟表,可以不用重复查询,而使用视图来进行操作,将拼接的连表保存起来。
二:视图的应用
1.创建视图的格式:
create view 创建视图名字 as 执行连表的SQL语句

注意:
当字段名相同时时,会产生冲突,导致无法建立视图。
修改字段名:
alter table <表名> change <字段名> <字段新名称> <字段的类型>;
2.查询视图层
select * from shi_tu;

3.查询Navicat视图层位置

4.删除视图表
删除视图表格式:
drop view 视图名;
使用删除视图:
deop view shi_tu;
5.使用视图须知注意事项(强调)
1.在硬盘中,视图只有表结构文件,没有表数据文件(视图数据来源与dep与emp文件,来源于创建的表文件)
2.视图通常是用于查询,尽量不要修改视图中的数据(改视图会影响到原表)

6.疑问: 开发过程中会不会去使用视图?
答案: 不会!
视图是mysql的功能,如果你的项目里大量使用了视图,那么意味着,你后期想要扩展某个功能的时候这个功能恰巧又需要对视图进行修改,意味着你需要在MySQL这边将视图修改一下,然后再去应用层修改对应的SQL语句,这就涉及到跨部门沟通的问题,所有通常不会使用视图,而是通过重新修改sql语句来扩展功能。
三:触发器
1.什么时触发器?
在满足对某张表数据的增,删,改的情况下,自动触发的功能称之为触发器
2.为何要用触发器?
触发器专门针对我们对某一张表的增insert,删delete,改update的行为,这类行为一旦执行
就会触发触发器的执行,既自动运行另外一段sql语句。
3.触发器trigger
触发器:满足特点条件之后自动执行
在MySQL只有三种情况下可以触发
1.针对表的增
增前 增后
2.针对表的改
改前 改后
3.针对表的删
删前 删后
4.触发器语法结构
create trigger 触发器的名字 before/after insert/update/delete on 表名 for each row
begin
sql语句
end
5.触发器名字在命名的时候推荐使用下列的方式(见名知意)
tri_after_insert_t1 tri_before_delete_t1
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 # 删除之后触发
7.注意事项(临时更换结束符)
需要注意 在书写sql代码的时候结束符是; 而整个触发器的结束符也是;
这就会出现语法冲突 需要我们临时修改结束符号
临时修改结束符格式:
delimiter 名字
delimiter $$
临时修改sql语句结束符,该语法只在当前窗口有效

四:触发器实战案例
1.1.MySQL中NEW作用
在MySQL中NEW特指数据对象可以通过点的方式获取字段对应的数据
id name pwd hobby
1 jason 123 read
NEW.name >>> jason
2.创建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
);
3.创建触发器
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 ; # 结束之后记得再改回来,不然后面结束符就都是$$了。
4.cmd表内插入记录(数据)
#往表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');
5.验证触发器(查询结果)
查询errlog表记录
select * from errlog;
解析:
1.当cmd命令行后台被插入数据时,if判断出现为‘on’ 报错的数据时
2.会自动触发 触发器会执行代码,将为‘on’错误代码 插入到《errlog报错日志》

6.查看触发器
show triggers\G; # 格式化展示

7.删除触发器
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 视图名 ...
随机推荐
- CentOS使用yum方式安装yarn和nodejs
# 使用epel-release.repo源安装的nodejs版本是6.17.1,有些前端项目使用的话会提示版本太低,具体下图 # 命令执行后的详细情况:curl -sL https://rpm.no ...
- 2.ElasticSearch系列之集群权限认证
1. 在master节点上创建秘钥库 export ES_PATH_CONF="/home/elasticsearch/config" && /usr/local/ ...
- <jsp:useBean>动作的使用
jsp:useBean动作的使用 jsp:useBean动作用于在指定的范围内寻找指定名称的JavaBean对象,如果找到,则返回该对象的引用可以操作里边的属性.如果没有找到则重新实例化一个对象.并且 ...
- 一天一道Java面试题----第十二天(如何实现接口幂等性)
这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1.如何实现接口幂等性 1.如何实现接口幂等性 唯一id.每次操作,都根据操作和内容生成唯一的id,在执行之前先判断id是 ...
- Selenium4.0+Python3系列(四) - 常见元素操作(含鼠标键盘事件)
一.写在前面 上篇文章介绍的是关于浏览器的常见操作,接下来,我们将继续分享关于元素的常见操作,建议收藏.转发! 二.元素的状态 在操作元素之前,我们需要了解元素的常见状态. 1.常见元素状态判断,傻傻 ...
- Codeforces 1672 E. notepad.exe
题意 这是一道交互题,有n个字符串,每个字符串长度:0-2000, n :0-2000 有一个机器对他进行排版,你可以给他一个每行的最大宽度w,那么每行只能放长度为w的字符: 每行相邻两个字符串之间至 ...
- DTSE Tech Talk | 第9期:EiPaaS驱动企业数字化转型
摘要: 揭秘华为企业集成新模式. 本期直播详解 组装式概念解析 EiPaaS的核心技术能力 华为实践经验分享 EiPaaS未来的技术趋势 直播讲师:华为云PaaS DTSE布道师 傅翌伟 tips:E ...
- JS学习笔记 (四) 数组进阶
1.基本知识 1.数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中的位置称为索引,以数字表示,以0开始. 2.数组是无类型的.数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的 ...
- Python标准库之 xml.etree.ElementTree
Element类型是一种灵活的容器对象,用于在内存中存储结构化数据. 每个element对象都具有以下属性: 1. tag:string对象,表示数据代表的种类. 2. attrib:dictiona ...
- 2022-11-14 Acwing每日一题
本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的.同时也希望 ...