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

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

视图

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

posted @ 2024-08-16 20:46  hhhaaa12138  阅读(34)  评论(0)    收藏  举报