MySQL之索引与视图

2/13/2017来源:SQL技巧人气:2040

索引

创建索引

1).创建表的时候创建索引 CREATE TABLE table_name(PRoperty_name1 data_type1 [limit],property_name2 date_type2 [limit],…,property_namen data_typen,[UNIQUE | FULL TEXT | SPATIAL] INDEX | KEY [name] (PROPERTYNAME [(length)] [ASC | DESC])); 其中的INDEX 和 KEY 是指定字段,二选一即可,[name]是为这个索引取名,PROPERTYNAME是索引对应的字段,ASC照例是升序排序,DESC是降序排序 ①.创建普通索引 ②.创建唯一性索引 使用UNIQUE约束 ③.创建全文索引 使用FULLTEXT约束 只能创建在CHAR、VARCHAR或TEXT类型上且只有MyISAM引擎支持全文索引 ④.创建单列索引 保证只对应一个字段 ⑤.创建多列索引 在多个字段上创建一个索引,只有使用了第一个字段的索引才会被使用 ⑥.创建空间索引 SPATIAL 存储引擎是MyISAM 索引字段必须有非空约束NOT NULL,数据类型是空间数据类型 GEOMETRY、POINT、LINESTRING、POLYGON等 2).在已存在的表上创建索引 CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名 ON 表名 (属性名 [(长度)] [ASC|DESC]); 3).用ALTER TABLE语句来创建索引 ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名 (属性名 [(长度)] [ASC | DESC]);

删除索引

DROP INDEX 索引名 ON 表名

视图

首先视图是一种虚拟的表,它依赖于原有的表,本身不保存任何数据信息

1).创建视图 CREATE [ALGORITHM={UNDEFINED | MERGE | TEMPTABLE}] VIEW 视图名 [(属性清单)] AS SELECT 语句 [WITH [CASCADED | LOCAL] CHECK OPTION]; 创建视图需要CREATE VIEW 权限,同时也应该具有SELECT权限 查询权限使用SELECT: SELECT Select_priv , Create_view_priv FROM MySQL.user WHERE user = ‘用户名’; 2).查看视图 必须有SHOW VIEW 的权限 ①.DESCRIBE 基本信息 语法:DESCRIBE 视图名; ②.SHOW TABLE STATUS 查看基本信息 语法:SHOW TABLE STATUS LIKE 视图名; ③.SHOW CREATE VIEW 查看详细信息 语法:SHOW CREATE VIEW 视图名; 例子:在views表中查看视图详细信息: SELECT * FROM information_schema.views;

3).修改视图 ①.CREATE OR REPLACE VIEW 语句 语法:CREATE OR REPLACE [ALGORITHM={UNDIFINED|MERGE|TEMPTABLE}] VIEW 视图名 [(属性清单)] AS SELECT 语句 [WITH [CASCADED|LOCAL] CHECK OPTION]; ②.ALTER 语句 只能修改已存在的视图 ALTER [ALGORITHM={UNDIFINED|MERGE|TEMPTABLE}] VIEW 视图名 [(属性清单)] AS SELECT 语句 [WITH [CASCADED|LOCAL] CHECK OPTION]; 4).更新视图 指通过视图来插入、更新和删除表中的数据 有些视图是不可更新的,如: 1.视图中包含SUN(),COUNT(),MAX(),MIN()… 2.包含UNION,UNION ALL,DISTINCT,GROUP BY,HAVING等关键字 3.常量视图 4.视图中的SELECT中包含子查询 5.由不可更新的视图导出的视图 6.创建视图是,ALGORITHM为TEMPTABLE类型 7.视图对应的表上存在没有默认值的列,而且该列没有包含在视图里 WITH[CASCADED|LOCAL] CHECK OPTION 也能决定视图能否更新 5).删除视图 用户必须拥有DROP权限 DROP VIEW [IF EXISTS] 视图名列表 [RESTRICT | CASCADED] 其中的IF EXISTS 判断视图是否存在,存在则删除,否则则不需要删除 查看DROP权限 SELECT Drop_priv FROM mysql.user WHERE user=‘用户名’;

以上部分就MySQL的索引和视图的内容