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

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

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

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就是派生表。

相关文章:

  • 用于判断主子关系的方法的实现(orm是efcore)
  • [特殊字符] Word2Vec:将词映射到高维空间,它到底能解决什么问题?
  • 深入解析OkHttp与Retrofit:Android网络请求的黄金组合
  • 蓝桥杯1447 砝码称重
  • Python 实例传递的艺术:四大方法解析与最佳实践
  • 用 RefCounted + WeakPtr 构建线程安全的异步模块
  • 【OpenCV基础2】图像运算、水印、加密、摄像头
  • 如何在 Windows 11 或 10 上安装 FlutterFire CLI
  • CSS提高性能的方法有哪些
  • C++面试4-sizeof解析
  • RabbitMQ的简介
  • C 语言学习笔记(函数2)
  • AI在网络安全中的应用之钓鱼邮件检测
  • Python列表 vs 元组:全面对比解析(新手友好版)
  • MYSQL8.0常用窗口函数
  • input组件使用type=“number“的时候,光标自动跳到首位
  • 【Tools】VMware Workstation 17.6 Pro安装教程
  • 在 CentOS 7.9 上部署 node_exporter 并接入 Prometheus + Grafana 实现主机监控
  • PyMOL命令行和脚本
  • 精益数据分析(70/126):MVP迭代中的数据驱动决策与功能取舍
  • 外汇局:4月下旬外资投资境内股票转为净买入
  • 老旧小区加装电梯后续维护谁负责?上海:各区属房管集团托底保障
  • 戛纳参赛片《爱丁顿》评论两极,导演:在这个世道不奇怪
  • 周国辉谈花开岭现象 :年轻的公益人正在用行动点亮希望
  • 玉林一河段出现十年最大洪水,一村民被冲走遇难
  • 专利申请全球领先!去年我国卫星导航与位置服务产值超5700亿元