7.视图、索引
- 视图
- 概述
- 视图(View)是一种虚拟存在的表。视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。
- 特点
- 1、简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。
- 2、安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。
- 3、数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。
- 1、简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。
- 用途
- 保密
- 复杂的查询语句
- 保密
- 简单视图和复杂视图
- 视图(View)是一种虚拟存在的表。视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。
- 语法
- 创建视图
- CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
- OR REPLACE:表示替换已有视图
- ALGORITHM:表示视图选择算法,默认算法是UNDEFINED(未定义的):MySQL自动选择要使用的算法 ;merge合并;temptable临时表
- select_statement:表示select语句
- [WITH [CASCADED | LOCAL] CHECK OPTION]:表示视图在更新时保证在视图的权限范围之内
- cascade是默认值,表示更新视图的时候,要满足视图和表的相关条件
- local表示更新视图的时候,要满足该视图定义的一个条件即可
- TIPS:推荐使用WHIT [CASCADED|LOCAL] CHECK OPTION选项,可以保证数据的安全性
- 基本格式:create view 视图名 as select语句
- ps:视图关联基表属性时用中文view(属性1,属性2),不加单引号。但一般不会用中文。
- 如果创建视图时不明确指定视图的列名,那么列名就和定义视图的select子句中的列名完全相同;
- 如果显式的指定视图的列名就按照指定的列名。
- 注意:显示指定视图列名,要求视图名后面的列的数量必须匹配select子句中的列的数量。
- OR REPLACE:表示替换已有视图
- CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
- 查看视图结构
- describe 视图名;
- show table status like '视图名';查看视图基本信息
- show create view语句查看视图详细信息
- 视图一旦创建完毕,就可以像一个普通表那样使用,视图主要用来查询
- select * from view_name;
- select * from view_name;
- ps:有关视图的信息记录在information_schema数据库中的views表中
- describe 视图名;
- 修改视图
- create or replace view 视图名 as select语句;
- 在视图存在的情况下可对视图进行修改,视图不在的情况下可创建视图
- 在视图存在的情况下可对视图进行修改,视图不在的情况下可创建视图
- ps:修改视图是指修改数据库中已存在的表的定义,当基表的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间一致
- 使 ALTER 修改
- alter view 视图名 as select查询语句
- alter view 视图名 as select查询语句
- ps:REATE OR REPLACE VIEW 语句不仅可以修改已经存在的机图,还可以创建新的视图,ALTER 语句只能修改已经存在的视图,因此通常选择 ATE OR REPLACE VIEW 语句修改视图。
- create or replace view 视图名 as select语句;
- 更新视图
- 插入,更新会修改基表!!!实际是对数据表进行操作
- 使用方法:insert、update、delete语句
- 把表名替换为视图名
- 插入insert into 表名[字段名] values (值1,[值2]);
- 更新update 表名 set 修改内容 where 修改条件;(后面这个其实就是一个匹配的条件,set后为修改的数据)
- 删除某一列delete from 表名 [where 字段=值];
- 把表名替换为视图名
- 插入,更新会修改基表!!!实际是对数据表进行操作
- 删除视图
- 删除视图只是删除视图的定义,并不会删除基表的数据
- drop view 视图名
- 删除视图只是删除视图的定义,并不会删除基表的数据
- 查询
- select * from 视图名
- 多表连查
- 多表连查
- select * from 视图名
- 创建视图
- 概述
- 索引
预习存储过程和触发器,btree
练习:- 概述
- 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可以提高数据库中特定数据的查询速度。
- 所有 MySQL 列类型都可以被索引,对相关列使用索引是减少查询操作时间的最佳途径。
- 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可以提高数据库中特定数据的查询速度。
- 插入查询结果
- 创建索引
- 普通索号|是最基本的 索引类型,没有唯一性之类的限制,其作用只是加快对数据的访问速度
- 创建表时加索引直接写在后面index(字段...)即可
- 创建表后加索引
- alter table 表名 add index 索引名(字段...);
- 或create index 表名 on 索引名(字段.....)
- alter table 表名 add index 索引名(字段...);
- 创建表时加索引直接写在后面index(字段...)即可
- 查看表结构
- show create table 表名
- show create table 表名
- 普通索号|是最基本的 索引类型,没有唯一性之类的限制,其作用只是加快对数据的访问速度
- 查询索引
- show create table 表明;其实就是查看表结构
- show create table 表明;其实就是查看表结构
- 删除索引
- drop inedx 索引名 on表明
- 或者alter table 表名 drop index 索引名
- drop inedx 索引名 on表明
- ps:MySQL 提供了一个 EXPLAIN 命令,它可以对 SELECT 语句进行分析,获取优化器对当前查询的执行计划,以供开发人员针对相关 SQL 进行优化。 在 SELECT 语句前加上 Explain 就可以查看到相关信息
- 索引种类
- 唯一索引unique
- 列值唯一,允许空值
- 使用:关键字都是加在在index前,下面几个都是
- 使用:关键字都是加在在index前,下面几个都是
- 列值唯一,允许空值
- 全文索引fulltext
- 全文索引可以用于全文搜索。只有 MyISAM 存储引擎支持全文索引 ,并且只为 CHAR VARCHAR。TEXT 全文索寻 只能添加到整个字段上,不支持局部(前缀)索引。
- 全文索引可以用于全文搜索。只有 MyISAM 存储引擎支持全文索引 ,并且只为 CHAR VARCHAR。TEXT 全文索寻 只能添加到整个字段上,不支持局部(前缀)索引。
- 等等,空间索引spatial
- 唯一索引unique
- 概述
-
1 SELECT * FROM course; 2 SELECT * FROM score; 3 SELECT * FROM student; 4 SELECT * FROM teacher; 5 SELECT * FROM youtable; 6 SELECT cou.c_id ,cou.c_name ,cou.t_id ,sco.s_id ,sco.s_score 7 FROM course cou JOIN score sco ON cou.c_id=sco.c_id; 8 #创建视图 9 CREATE VIEW newshitu AS SELECT * FROM course; 10 SELECT * FROM newshitu; 11 #创建视图 12 CREATE VIEW shitu1 AS SELECT cou.c_id ,cou.c_name ,cou.t_id ,sco.s_id ,sco.s_score 13 FROM course cou JOIN score sco ON cou.c_id=sco.c_id; 14 #查看视图 15 SELECT * FROM shitu1; 16 SHOW TABLES; 17 #删除视图 18 DROP VIEW shitu1; 19 #修改视图 会修改原表数据 20 UPDATE shitu1 SET s_score = 0 WHERE c_id =01 ; 21 SHOW FIELDS FROM score; 22 #显示当前数据库列表 23 SHOW DATABASES; 24 PRIMARY 25 #显示数据库中的数据表 26 SHOW TABLES; 27 #显示当前use的数据库名 28 SHOW DATABASE(); 29 #创建视图属性关联基表属性 30 CREATE VIEW shitu2(mingzi) AS SELECT s_name FROM student; 31 DROP VIEW shitu3; 32 #创建视图多个属性关联基表多个属性 33 CREATE VIEW shitu3(xuhao,mingzi,shengri,xingbie) AS SELECT s_id,s_name,s_birth,s_sex FROM 34 student; 35 SELECT * FROM shitu3; 36 #索引 37 #首先创建一张表的时候加索引: 38 CREATE TABLE testTable( 39 id INT NOT NULL, 40 username VARCHAR(16) NOT NULL, 41 INDEX suoyin (id,username) 42 ); 43 #添加元素 44 INSERT INTO testTable VALUES(1,"张飞"); 45 INSERT INTO testTable VALUES(2,"赵云"); 46 INSERT INTO testTable VALUES(3,"关羽"); 47 INSERT INTO testTable VALUES(4,"黄忠"); 48 INSERT INTO testTable VALUES(5,"马超"); 49 INSERT INTO testTable VALUES(6,"张辽"); 50 SELECT * FROM testTable; 51 DESC testTable; 52 DROP TABLE testTable; 53 #创建表之后加索引: 54 ALTER TABLE testTable ADD INDEX index_1(id); 55 CREATE INDEX index_2 ON testTable(username); 56 #根据索引查询 57 SELECT * FROM testTable WHERE username LIKE '张%'; 58 #删除索引 59 DROP INDEX index_2 ON testTable; 60 ALTER TABLE testTable DROP INDEX index_1; 61 #查询语句使用索引 62 EXPLAIN SELECT * FROM testTable WHERE id = 1;



浙公网安备 33010602011771号