我这么久,才弄清楚mysql的触发器、视图、索引,受益匪浅( 二 )


? 使用视图安全,用户只访问到视图给定的内容集合,这些都是数据表的某些行和列,避免用户直接操作数据表引发的一
系列错误 。
 
? 使用视图相对独立,应用程序访问是通过视图访问数据表,从而程序和数据表之间被视图分离 。如果数据表有变化,完
全不用去修改 SQL 语句,只需要调整视图的定义内容,不用调整应用程序代码 。
? 复杂的查询需求 。可以进行问题分解,然后将创建多个视图获取数据,再将视图联合起来就能得到需要的结果了
假如因为某种需要,a 表与 b表需要进行合并以组成一个新的表 c,最后 a 表与b表都不 存在了 。而由于原来程序中编写 SQL分别是基于 a 表与 b表查询的,这就意味着需要重新 编写大量的 SQL(改成向 c 表去操作数据),而通过视图就可以不用修改 SQL 。定义两个视图 名字还是原来的表名 a 和 b 。a、b视图完成从 c 表中取出内容 。需要说明的是,使用这样 的解决方式,基于对视图的细节了解越详细越好 。因为使用视图与使用表在语法上没区 别 。比如视图名 a,那么查询还是“select*froma” 。
视图的工作机制:
当调用视图的时候,才会执行视图中的 SQL,进行取数据操作 。视图的内容没有存 储,而是在视图被引用的时候才派生出数据 。这样不会占用空间,由于是即时引用,视图 的内容与真实表的内容总是一致的 。视图这样设计最主要的好处就是比较节省空间,当数 据内容总是一样时,就不需要维护视图的内容,反维护好真实表的内容,就可以保证视图 的完整性了 。
创建语法:

create [algorithm={ undefined| merge| temptable}]
view view_ name as
select column_ name( s) from table_ name
[with [cascaded| local] check option];
其中,ALGORITHM 为可选参数,表示视图选择的算法 。
? UNDEFINED表示 MySQL将自动选择所要使用的算法(默认的);
? MERGE 表示将视图的语句与视图定义合并起来,使得视图定义的某一部分取代语 句的对应部分;
? TEMPTABLE 表示将视图的结果存入临时表,然后使用临时表执行语句 。
WITH CHECK OPTION 为可选参数,表示更新视图时要保证在视图的权限范围内 。
? CASCADED表示更新视图时要满足所有相关视图和表的条件才进行更新(默认);
? LOCAL 表示更新视图时,要满足该视图本身定义的条件即可更新 。
示例:
我这么久,才弄清楚mysql的触发器、视图、索引,受益匪浅

文章插图
 
表和视图共享数据库中相同的名称空间,因此,数据库不能包含具有相同名称的表和视 图 。视图必须具有唯一的列名,不得有重复,就像基表那样 。
修改
create or replace [algorithm={ undefined| merge| temptable}]
view 视图
as select 语句
[with [cascaded| local] check option];
删除因为视图本身只是一个虚拟表,没有物理文件存在,所以视图的删除并不会删除数据,只 是删除掉视图的结构定义 。
drop view [if exists] view_ name [, view_ name1, view_ name2...]索引索引是在存储引擎中实现的,因此每种存储引擎的索引都不一定完全相同,并且每种存储 引擎也不一定支持所有索引类型 。根据存储引擎定义每个表的最大索引数和最大索引长 度 。所有存储引擎支持每个表至少 16 个索引,总索引长度至少为 256 字节 。大多数存储 引擎有更高的限制 。MYSQL中索引的存储类型有两种:BTREE 和 HASH,具体和表的存储 引擎相关;MYISAM 和 InnoDB 存储引擎只支持 BTREE索引 。
索引的优点
1、通过创建唯一索引,保证数据库表每行数据的唯一性
2、大大加快数据查询速度
3、在使用分组和排序进行数据查询时,可以显著减少查询中分组和排序的时间
索引的缺点
1、维护索引需要耗费数据库资源
2、索引需要占用磁盘空间,索引文件可能比数据文件更快达到最大文件尺寸
3、当对表的数据进行增删改的时候,因为要维护索引,速度会受到影响
索引的分类
1、普通索引和唯一索引
主键索引是一种特殊的唯一索引,不允许有空值
2、单列索引和复合索引
单列索引只包含单个列
复合索引指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字 段,索引才会被使用 。使用复合索引时遵循最左前缀集合
3、全文索引
全文索引类型为 FULLTEXT,在定义索引的列上支持值的全文查找,允许在这些索引列 中插入重复值和空值 。全文索引可以在 CHAR、VARCHAR、TEXT类型列上创建 。MYSQL 只有 MYISAM 存储引擎支持全文索引


推荐阅读