目录

一:视图

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视图-触发器的更多相关文章

  1. mysql 视图 触发器 存储过程 函数事务 索引

    mysql 视图 触发器 存储过程 函数事务 索引 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当 ...

  2. Mysql 视图,触发器,存储过程,函数,事务

    视图 视图虚拟表,是一个我们真实查询结果表,我们希望将某次查询出来的结果作为单独的一个表,就叫视图,无法对图字段内容进行增删改. --格式: CREATE VIEW 视图名字 AS 操作; --比如: ...

  3. python mysql 视图 触发器 事物 存储过程 用户授权 数据备份还原

    ###################总结########### 视图是一个虚拟表(非真实存在) 是跑在内存中的表,真实表是在硬盘上的表 使用视图我们可以把查询过程中的临时表摘出来,保存下来,用视图去 ...

  4. mysql 视图 触发器 事物 存储过程 函数 流程控制

    1.视图 *** 视图是有一条sql语句的查询结果构成的虚拟表 其不是物理存在的 使用方式与普通表相同 视图的作用1.简化sql语句的编写 2.限制可以查看的数据 可以使用权限来完成 权限某一个库 的 ...

  5. mysql视图 触发器 事物 函数 存储过程

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

  6. MySQL 视图触发器事务存储过程函数

    事务  致命三问 什么是事务:开启了一个包含多条SQL语句的事务,这些SQL语句要么都执行成功,要么有别想成功:例如A向B转账,二人账户并不属于一家银行,在转账过程中由于网络问题,导致A显示转账 成功 ...

  7. MySQL 视图 触发器 事务 存储过程 函数 流程控制 索引与慢查询优化

    视图 1.什么是视图? 视图就是通过查询得到的一张虚拟表,然后保存下来,下次可直接使用 2.为什么要使用视图? 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图? create view ...

  8. MySQL——视图/触发器/事务/存储过程/函数/流程控制

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

  9. MySQL视图,触发器,事务,存储过程,函数

    create triggr triafterinsertcmdlog after insert on cmd_log FOR EACH ROW trigger_body .#NEW : 代表新的记录 ...

  10. mysql 视图/触发器/函数

    一.视图 作用:简写代码,与临时表的作用差不多 .创建 create view 视图名 as SQL语句 .修改 alter view 视图名 as 新SQL语句 .删除 drop view 视图名 ...

随机推荐

  1. prettierrc格式化常用配置

    #最大长度 printWidth: 140 #单引号 singleQuote: true tabWidth: 2 useTabs: false # 句尾添加分号 semi: false # js an ...

  2. while.for循环和基本数据类型内置方法

    while循环补充说明 流程控制之for循环 基本数据类型内置方法 内容详细 1.死循环 真正的死循环是一旦执行,Cpu的功耗会急速上升 知道系统采取紧急措施 所以 尽量不要让cpu长时间不断运算. ...

  3. 云原生虚拟网络 tun/tap & veth-pair

    云原生虚拟网络 tun/tap & veth-pair 转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/684 ...

  4. 洛谷P4408 [NOI2003] 逃学的小孩 (树的直径)

    本题就是从c到a/b再到b/a距离的最大值,显然,a和b分别是树的直径的两个端点,先用两次dfs求出树的直径,再用一次dfs求出每个点到a的距离,最后再用一次dfs求出每个点到距离它较近的a/b的距离 ...

  5. BGCN Rec:模型结构概述

    简单论述 BGCN将user-item interaction,user-bundle interaction和bundle-item affiliation 关联到统一的异构图中.以项目节点为桥梁, ...

  6. MyBatis的各种查询功能

    1.查询一个实体类对象 /** * 根据用户id查询用户信息 * @param id * @return */ User getUserById(@Param("id") int ...

  7. RE语法

    RE,英文为Regular Expression,中文译作正则表达式.用于文本过滤的工具.RE语法由一些元字符.其它任意字符串作为基本单元,匹配次数.分组匹配.锚定符等为操作单元组成.进行逐行扫描,满 ...

  8. Ajax的使用(jquery的下载)

    Ajax学习笔记(jquery的下载) JQuery的官网下载 地址:http://jquery.com 右上角的"Download JQuery" 三个可供下载的文件: Prod ...

  9. JSON parse error: Cannot deserialize value of type `java.lang.Integer` from Boolean value

    问题原因所在:前端Vue传输的数据字段类型和后端实体类字段不一致. 我的实体类字段是int类型.前端传输的数据是布尔类型. 文章目录 1.后端方法 2.实体类字段 2.前端传输的数据 1.后端方法 @ ...

  10. 一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 11.HashMap和HashTable的区别及底层实现 12.ConcurrentHashMap原理简述,jdk7和jd ...