数据库视图,索引,触发器
视图
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;
修改视图
索引概述
索引就好⽐⼀本书的⽬录,它会让你更快的找到内容,显然⽬录(索引)并不是越多越好,假如这本书1000⻚,有
500⻚也是⽬录,它当然效率低,⽬录是要占纸张的,⽽索引是要占磁盘空间的。
分类
普通索引 INDEX: 最基本的索引,没有任何限制
唯⼀索引 UNIQUE: 与"普通索引"类似,不同的是索引列的值必须唯⼀,但允许有空值。
全⽂索引 FULLTEXT:仅可⽤于 MyISAM 表,针对较⼤的数据,⽣成全⽂索引很耗时好空间。
主键索引 PRIMARY KEY:它是⼀种特殊的唯⼀索引,不允许有空值。
索引测试
未建立索引
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 。
建立索引后
table : 查询的表名,这⾥是 t5 。
partitions : 如果查询使⽤了分区表,这⾥会列出使⽤的分区。
type : 访问表的⽅式,这⾥是 ref ,表示使⽤了索引查找。
possible_keys : 可能使⽤的索引,这⾥是 index_t5_id 。
key : 实际使⽤的索引,这⾥也是 index_t5_id 。
key_len : 使⽤的索引的⻓度,这⾥是 5 ,表示使⽤了⼀个 5 字节的索引。
rows : 表示查询扫描的⾏数,这⾥是 1 ,表示只扫描了⼀⾏。
这个查询使⽤了 index_t5_id 索引,只扫描了⼀⾏,性能⽐较好
索引管理
删除索引
//删除索引语法: 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)
标签:触发器,视图,查询,索引,trigger,MySQL From: https://www.cnblogs.com/zgw03/p/18363606