当前位置: 首页 > backend >正文

视图+触发器+临时表+派生表

作为常用的数据对象,视图为数据查询提供了一条捷径;触发器为数据自动维护提供了便利;而临时表和派生表也在一定程度方便了数据查询与维护。

1.视图

视图和表有很多相似的地方,也是由若干个字段以及若干条记录构成的,它也可以作为select语句的数据源。甚至在某些特定条件下,可以通过视图对表进行更新操作。然而,本质上视图中的数据并不占用存储空间,视图中保存的仅仅是一条select语句,其源数据都来自于数据库表,数据库表称为基本表或者基表,视图称为虚表。
(1)格式:
create view 视图名
as
select语句
例如:create view view_table1
as
select * from table1;
(2)查看视图的定义
desc 视图名;
(3)show tables包含了所有的基表,也包含了所有的视图
(4)MYSQL系统数据库的information_schema的views表存储了所有视图的定义
select * from information_schema.views
(5)删除视图
drop view 视图名
(6)检查视图
视图是一个基于基表的虚表,数据库开发人员不仅可以通过视图检索数据,还可以通过视图修改数据,这就好比数据库开发人员不仅可以通过窗户查看房屋内的布局,还可以通过窗户修改方案内的布局,这种视图称为普通视图。创建视图时,没有使用"with check option"子句的视图都是普通视图。
格式:
create view 视图名
as
select语句
with [local|cascaded] check option
创建视图时,没有使用with check option,即with_check_option的值为0,表示视图为普通视图;
使用with check option子句或者with cascaded check option子句时,表示该视图为cascaded视图;
使用with local check option子句时,表示该视图使用local视图。
(7)local与cascaded检查视图
对检查视图进行更新操作时,只有满足了检查条件的更新操作才能顺利执行。
local视图,需要通过视图检查条件的更新语句才能顺序执行。
cascade视图时,需要满足所有针对该视图的所有视图的检查条件才能顺序执行。

2.触发器

触发器是MYSQL 5.0新增的功能,触发器定义了一系列操作,这一系列操作称为触发程序,当触发程序发生时,触发程序会自动运行。触发器主要用于监视某个表的insert,update以及delete等更新操作,从而实现数据的自动维护。

(1)格式:
create trigger 触发器名 触发时间 触发事件 on 表名 for each row
begin
触发程序
end;

其中:触发事件有三种:insert,update,delete;时间有两种:before和after;而for each row表示行级触发器。
注意:触发程序中可以使用old关键字和new关键字。当向表插入新记录时,new表示新记录,可以用new.字段名访问。当从表删除某条记录时,在触发器程序中可以使用old关键字表示旧记录。当修改某条记录时,old表示旧记录,new表示新记录。

举例:如果后续update操作中,up_limit不是60,150,230,就把新记录的up_limit设置为旧记录的up_limit

delimiter $$
create trigger course_update_before_trigger before update on course for each row
begin
if(new.up_limit!=60 || new.up_limit!=150 || new.up_limit!=230) thenset new.up_limit = old.up_limit;
end if;
end;
$$
delimiter;

(2)查看触发器的定义
方式1:show triggers;
方式2:查询information_schemga数据库的triggers表,可以查看触发器的定义
select * from information_schema.triggers\G
方式3:show create trigger
(3)删除触发器
drop trigger 触发器名

3.临时表

按照MYSQL临时表的存储位置,可以将其分为内存临时表以及外存临时表。按照MYSQL临时表的创建时机,可以分为自动创建的临时表以及手工创建的临时表。
当“主查询”中包含派生表,或者当select语句中包含union子句,或者当select语句中包含对一个字段的order by子句时,MYSQL为了完成查询,则需要自动创建临时表存储临时结果集,这种临时表由MYSQL自行创建,自行维护,称为自动创建的临时表。对于自动创建的临时表而言,由于内存临时表的性能更优越,MYSQL总是首先使用内存临时表,而当内存临时表变得太大,达到了某个阈值的时候,内存临时表被转存为外存临时表。也就是说,外存临时表是内存临时表在存储空间上的一种延申。内存临时表被转存为外存临时表的阈值由系统变量max_heap_table_size和tmp_table_size的较小值决定。
另外数据库开发人员也可以根据自身需要,手工创建临时表完成复杂功能,本章主要讲解手工创建临时表的使用方法。
(1)创建临时表:
create temporary table temp(name char(100),id int);
(2)查看临时表
show create table temp\G;
(3)删除临时表
drop temporary table 临时表表名

4.派生表:

派生表类似于临时表,但与临时表相比,派生表的性能更优越。派生表与视图一样,一般在from子句中使用,举例:
select * from (select * from table1) u where u.col1=2;
其中的u就是派生表。

http://www.xdnf.cn/news/7343.html

相关文章:

  • 使用Docker部署React应用与Nginx
  • 分组背包问题:如何最大化背包价值?
  • 基于Java在高德地图面查询检索中使用WGS84坐标的一种方法-以某商场的POI数据检索为例
  • 常见提示词攻击方法和防御手段——提示词越狱
  • 专题五:floodfill算法(太平洋大西洋水流问题)
  • 前端加载超大图片(100M以上)实现秒开解决方案
  • 【分治】快速排序
  • lowcoder数据库操作4:显示查询数据表格
  • 加载渲染geojson数据
  • list.forEach(s -> countService.refreshArticleStatisticInfo(s.getId())); 讲解一下语法
  • Blender cycles烘焙贴图笔记
  • Linux 文件(2)
  • JavaScript 中的五种继承方式进行深入对比
  • vue3 vite 项目中自动导入图片
  • Axure疑难杂症:垂直菜单展开与收回(4大核心问题与专家级解决方案)
  • 新能源汽车充电桩管理平台如何利用智慧技术优化资源配置问题?
  • Triton介绍和各平台支持情况分析
  • Spring 代理与 Redis 分布式锁冲突:一次锁释放异常的分析与解决
  • 每日c/c++题 备战蓝桥杯(洛谷P4715 【深基16.例1】淘汰赛 题解)
  • 基于Zynq SDK的LWIP UDP组播开发实战指南
  • redis的List为什么用ziplist和quicklist
  • SCGI 服务器详解
  • 大模型(1)——基本概念
  • JVM的内存划分
  • vue3:十三、分类管理-表格--编辑、新增、详情、刷新
  • TDengine 安全部署配置建议
  • SpringBoot+ELK 搭建日志监控平台
  • Android Kotlin权限管理最佳实践
  • 【集成电路】集成电路导论知识点
  • HJ10 字符个数统计【牛客网】