首页 > 数据库 >数据库视图,索引,触发器

数据库视图,索引,触发器

时间:2024-08-16 20:49:41浏览次数:12  
标签:触发器 视图 查询 索引 trigger MySQL

数据库视图,索引,触发器

视图

mySQL中的视图是⼀种虚拟表 ,它是基于 ⼀个或多个基础表(或其他视图)的select查询结果集 。虚拟表是⼀种逻辑

上的表,它不实际存储数据,⽽是在查询时动态⽣成结果集。因此,视图并不是真正的表,⽽是基于⼀个或多个表

的查询结果的⼀种“虚拟表”。

视图可以看作是对基础表的⼀个逻辑上的封装,它可以隐藏基础表的复杂性,简化查询操作,并提供数据安全性和

数据保护。视图可以像表⼀样进⾏查询、更新、插⼊和删除操作,但实际上它们不存储任何数据,⽽是在查询时动态⽣成结果集

视图的应⽤场景包括

\

1. 简化查询操作:视图可以将复杂的查询操作封装起来,使得⽤户可以通过⼀个简单的视图来访问需要的数据。

2. 数据安全性和数据保护:通过视图可以限制⽤户对某些数据的访问权限,保护数据的安全性。

3. 数据库设计:视图可以⽤于数据库设计中,通过将多个表的数据合并到⼀个视图中,简化数据库的设计和维护。
4. 性能优化:视图可以提⾼查询性能,通过将多个表的查询结果缓存到视图中,可以避免重复查询。

视图是⼀个⾮常有⽤的⼯具,可以帮助我们简化查询操作,提⾼数据安全性和数据保护,优化数据库设计和查询性能。

查看视图

SHOW FULL TABLES WHERE TABLE_TYPE='VIEW';

查看视图详细信息

SHOW TABLE STATUS WHERE Name='视图名';

查看视图创建定义信息

SHOW CREATE VIEW 视图名\G

SHOW CREATE VIEW total_product;

修改视图

image-20240816182024798

索引概述

索引就好⽐⼀本书的⽬录,它会让你更快的找到内容,显然⽬录(索引)并不是越多越好,假如这本书1000⻚,有

500⻚也是⽬录,它当然效率低,⽬录是要占纸张的,⽽索引是要占磁盘空间的。

分类

普通索引 INDEX: 最基本的索引,没有任何限制

唯⼀索引 UNIQUE: 与"普通索引"类似,不同的是索引列的值必须唯⼀,但允许有空值。

全⽂索引 FULLTEXT:仅可⽤于 MyISAM 表,针对较⼤的数据,⽣成全⽂索引很耗时好空间。

主键索引 PRIMARY KEY:它是⼀种特殊的唯⼀索引,不允许有空值。

索引测试

未建立索引

image-20240816182445239

image-20240816182842551

id : 查询中每个 SELECT ⼦句的唯⼀标识符。

select_type : 查询的类型。在这个例⼦中,查询类型为 SIMPLE ,表示这是⼀个简单的 SELECT 查询,不

包含⼦查询或联接。

table : 正在访问的表。

partitions : 匹配的分区。在这个例⼦中,分区为 NULL ,表示没有使⽤分区。

type : 访问表的⽅式。在这个例⼦中, type 为 ALL ,这意味着 MySQL 将扫描整个表来查找匹配的⾏。

possible_keys : 可能使⽤的索引列表。在这个例⼦中,没有使⽤索引,因此 possible_keys 为 NULL 。

key : 实际使⽤的索引。在这个例⼦中,没有使⽤索引,因此 key 为 NULL 。

key_len : 使⽤的索引的⻓度。在这个例⼦中,没有使⽤索引,因此 key_len 为 NULL 。

ref : 列与索引之间的匹配条件。在这个例⼦中,没有使⽤索引,因此 ref 为 NULL 。

rows : MySQL 估计必须扫描的⾏数。在这个例⼦中,MySQL 估计必须扫描 199949 ⾏才能找到匹配的⾏。

filtered : MySQL 扫描表后过滤⾏的百分⽐。在这个例⼦中,MySQL 扫描了整个表,但只返回了 10% 的

⾏,因此 filtered 为 10.00 。

Extra : 其他信息。在这个例⼦中,使⽤了 WHERE ⼦句来过滤⾏,因此 Extra 为 Using where 。

建立索引后

image-20240816182405595

table : 查询的表名,这⾥是 t5 。

partitions : 如果查询使⽤了分区表,这⾥会列出使⽤的分区。

type : 访问表的⽅式,这⾥是 ref ,表示使⽤了索引查找。

possible_keys : 可能使⽤的索引,这⾥是 index_t5_id 。

key : 实际使⽤的索引,这⾥也是 index_t5_id 。

key_len : 使⽤的索引的⻓度,这⾥是 5 ,表示使⽤了⼀个 5 字节的索引。

rows : 表示查询扫描的⾏数,这⾥是 1 ,表示只扫描了⼀⾏。

这个查询使⽤了 index_t5_id 索引,只扫描了⼀⾏,性能⽐较好

索引管理

image-20240816182957903

删除索引

//删除索引语法: DROP INDEX 索引名 ON 表名

mysql> drop index index_t5_id on t5;

触发器

当满⾜⼀定的条件以后,它会触发⼀个动作的执⾏,trigger

触发器是⼀种特殊类型的存储过程,它是在特定的表上⾃动执⾏的代码。当特定的事件发⽣时,MySQL 触发器会

被⾃动激活。这些事件可能包括 INSERT、UPDATE 或 DELETE 操作,以及对特定列的更改。

2、触发器的执⾏不是由程序调⽤,也不是由⼿⼯启动,⽽是由事件来触发、激活从⽽实现执⾏

3、触发器是由⼀定的事件来触发的,对表的增删改操作、不包括查询,查询是没有触发器的

4、⽣产中⼀般不通过MySQL中触发器来实现这功能,是通过Java程序、Python程序代码来实现触发器

CREATE:

 [DEFINER = { user | CURRENT_USER }]

 TRIGGER trigger_name

 trigger_time trigger_event

 ON tbl_name FOR EACH ROW

 trigger_body

说明:

\1. DEFINER:指定触发器的创建者,可以是⽤户或当前⽤户。

\2. TRIGGER trigger_name:定义触发器的名称。

\3. trigger_time:指定触发器的触发时间,可以是BEFORE或AFTER。

\4. trigger_event:指定触发器的触发事件,可以是INSERT、UPDATE或DELETE。

\5. ON tbl_name:指定触发器所在的表名。

\6. FOR EACH ROW:表示触发器对每⼀⾏记录都会触发。

\7. trigger_body:触发器的执⾏语句体,可以是SQL语句或存储过程。

查看触发器

mysql> SHOW TRIGGERS\G

删除触发器

#DROP TRIGGER trigger_name;

mysql> DROP TRIGGER insert_user_audit;

Query OK, 0 rows affected (0.00 sec)

#快速的清空表:truncate table table_name;

mysql> truncate table users;

Query OK, 0 rows affected (0.00 sec)

image-20240816195728149

标签:触发器,视图,查询,索引,trigger,MySQL
From: https://www.cnblogs.com/zgw03/p/18363606

相关文章

  • Mysql库表无索引查询优化
    情况单表三千万数据量,只有id这一个索引无其他索引,这时候使用无索引的kh字段查询数据分页查询优化explainSELECT *FROM dev_log_27_2024WHEREjd_kh='14344692103'ORDERBY idDESCLIMIT0,10000带where不带wheresql执行流程全表扫描(FullTableSc......
  • WPF 触发器
    一、样式触发器样式触发器可以在指定的控件属性满足某种条件后进行一些样式的变换,当触发条件不满足时恢复原样。样式触发器的简单使用<Window.Resources><Stylex:Key="checkBoxStyle"TargetType="CheckBox"><Style.Triggers><TriggerProperty="......
  • 深入InnoDB核心:揭秘B+树在数据库索引中的高效应用
    目录一、索引页与数据行的紧密关联(一)数据页的双向链表结构(二)记录行的单向链表结构二、未创建索引情况(一)无索引下的单页查找过程以主键为搜索条件以非主键列为搜索条件(二)无索引下的多页查找过程三、InnoDB中的B+树索引方案初体会(一)前置说明行格式示意图页内格式示......
  • 根据银灿IS903的CD-ROM盘符打开光盘文件索引数据库Index-Your-Files-2024年8月15日
    根据银灿IS903的CD-ROM盘符打开光盘文件索引数据库Index-Your-Files-2024年8月15日   =====段落分隔符=====Config-7z-SFX-Builder-v2.5.0.5;!@Install@!UTF-8!InstallPath="C:\\APP"OverwriteMode="1+8"RunProgram="nowait:C:\\APP\\IYF\\Delphi7\\Proj......
  • 详细分析SQL Server触发器的基本知识
    目录前言1.基本知识2.Demo3.查找特定表的存储过程前言原先写过一篇类似的,不过是基于Mysql:添加链接描述对应SqlServer的补充知识点:详细配置SQLServer的链接服务器(图文操作Mysql数据库)1.基本知识基本知识其实差不多,先从CRUD开始触发器的类型:DML触发器:在对表......
  • SQLServer 错误: 8646,在数据库 'msdb',表 1077578877 的索引 ID 1 中找不到索引条目
    一台非生产服务器,磁盘被打满了,刚开始以为只是正常的磁盘使用增长满了,就清理了一部分空间出来,没过一会,就又满了,排查到sqlserver的错误日志文件一直在增 同时查看sqlserver错误日志,大量报错日志:[298]SQLServer错误:8646,在数据库'msdb',表1077578877的索引ID1中找不到索......
  • Java小白一文视图教废CSDN大佬们局部内部类和匿名内部类
    内部类一个类的内部又完整地嵌套了另一个类结构,被嵌套的类称为内部类,嵌套其他类的类称为外部类,是我们类的第五大成员,内部类最大的特点就是可以直接访问私有属性,并且可以体现类与类之间的包含关系。类的五大成员:属性、方法、构造器、代码块、内部类内部类快速入门//外部其......
  • MySQL- 覆盖索引
    覆盖索引(CoveringIndex)是MySQL中的一种优化技术,它能够显著提高查询性能。在使用覆盖索引的情况下,查询操作只需要访问索引即可获取所需的数据,而不必再访问表的实际数据行(即不需要回表)。这种优化可以减少I/O操作,提升查询效率。1.什么是覆盖索引?覆盖索引是指一个索引包......
  • MySQL- 索引下推
    索引下推(IndexConditionPushdown,简称ICP)是MySQL5.6引入的一项优化技术,它通过将部分查询条件“下推”到索引扫描阶段,从而减少不必要的行访问和回表操作,提高查询性能。1.索引下推的概念在传统的索引扫描过程中,MySQL会首先通过索引找到符合索引条件的记录,然后回表(即......
  • 数据库系统 第13节 索引
    索引(Indexing)是一种数据结构技术,广泛应用于数据库和文件系统中,用于提高数据检索的速度。在没有索引的情况下,数据库必须从头到尾扫描整个表来找到所需的数据行,这被称为全表扫描(FullTableScan),对于大型数据库来说效率极低。索引的基本原理索引类似于书籍的目录。当你需要查......