如何在服务器上做网站,模仿大型门户网站做ppt,腾讯企点下载,论坛推广的步骤目录 1.视图
1.1什么是视图
1.2为什么需要视图
1.3视图的作用和优点
1.4创建视图
1.5更新视图
1.6视图使用规则
1.7修改视图
1.8删除视图
2.索引
2.1什么是索引
2.2索引特点
2.3索引分类
2.4索引优缺点
2.5创建索引
2.6查看索引
2.7删除索引 1.视图
1.1什么是…目录 1.视图
1.1什么是视图
1.2为什么需要视图
1.3视图的作用和优点
1.4创建视图
1.5更新视图
1.6视图使用规则
1.7修改视图
1.8删除视图
2.索引
2.1什么是索引
2.2索引特点
2.3索引分类
2.4索引优缺点
2.5创建索引
2.6查看索引
2.7删除索引 1.视图
1.1什么是视图
MySQL中的视图view是一种虚拟表其内容由查询定义视图本身并不包含数据。 视图看起来和真实的表完全相同但其中的数据来自定义视图时用到的基本表并且在打开视图时动态生成类似对常用的复杂多表连接查询的结果截图拍照之后需要用到时只需看一下视图即可无需重新查询以节省资源 视图是一种数据库对象其内没有存储任何数据它只是对表的一个查询
1.2为什么需要视图
例如经常要对student和score表进行连接查询每次都要做表的连接写同样的一串语句同时由于成绩数据比较敏感对外要求不可见。对这样的问题就可以通过视图来解决。
1.3视图的作用和优点
作用 控制安全 保存查询数据 优点 简化操作通过视图可以使用户将注意力集中在他所关心的数据上。使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件。 提高数据的安全性在设计数据库时可以针对不同的用户定义不同的视图使用视图的用户只能访问他们被允许查询的结果集。 数据独立视图的结构定义好之后如果增加新的关系或对原有的关系增加新的字段对用户访问的数据都不会造成影响。
1.4创建视图
create [or replace] [algorithm {undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option]
# 说明
1、or replace如果要创建的视图名称已存在则替换已有视图。
2、algorithm可选参数表示视图选择的算法默认算法是 undefined
(1)undefined未定义指定算法
(2)merge:更新视图表数据的同时会更新真实表的数据
(3)temptable:只能查询不能更新
3、view_name新建的视图名称。
4、column_list可选表示视图的字段列表。若省略则使用 select 语句中的字段列表。
5、as select_statement创建视图的 select 语句。
6、with check option表示更新视图时要保证该视图的 where 子句为真。
比如定义视图create view v1 as select * from salary 5000;
如果要更新视图则必须保证 salary 字段的值在 5000 以上否则报错。
(1)cascaded:必须满足所有针对该视图的条件才可以更新
(2)local:只需满足本视图的条件就可以更新 1.创建来源一张表的视图
mysql show databases;
mysql use mydb9_stusys;
mysql create view v_student as select sno,sname,ssex,year(now())-year(birth) as
age from student;
mysql select * from v_student;
mysql show tables;
2.创建多表连接的视图
mysql create view v_score as select student.*, score from student join sc on
student.sno sc.sno;
Query OK, 0 rows affected (0.02 sec)
mysql select * from v_score;
mysql show tables;
mysql show create view v_score;3.创建视图字段起别名
mysql create or replace view v_avg(sex,avg_score) as select ssex ,
round(avg(score),2) from student inner join sc on student.snosc.sno group by
ssex;
Query OK, 0 rows affected (0.01 sec)
mysql select * from v_avg;
-----------------
| sex | avg_score |
-----------------
| 女 | 73.52 |
| 男 | 78.51 |
-----------------
1.5更新视图
以下视图不可更新 包含以下关键字的 SQL 语句 聚合函数、distinct、group by 、having、union 或 uinon all select 中包含子查询 from 一个不可更新的试图 where 子句的子查询引用了 from 子句中的表。
1.创建视图,限制更新
mysql create or replace view v_age as select sno,sname,ssex,sage from student
where sage20 with check option; # 增加限制更新参数
Query OK, 0 rows affected (0.00 sec)mysql select * from v_age;
mysql update v_age set sage 24 where sno s011; # 更新视图24符合条件
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0mysql select * from student; # 查看视图的基本表数据已经变更# 若更新时条件不符合where字句则限制更新
mysql update v_age set sage 18 where sno s011; # 18岁不符合where子句
ERROR 1369 (HY000): CHECK OPTION failed mydb9_stusys.v_agemysql select * from v_student;
mysql update v_student set age30 where snos001;
ERROR 1348 (HY000): Column age is not updatable
1.6视图使用规则
视图必须有唯一命名 在mysql中视图的数量没有限制 创建视图必须从管理员那里获得必要的权限 视图支持嵌套也就是说可以利用其他视图检索出来的数据创建新的视图 在视图中可以使用order by但是如果视图内已经使用该排序子句则视图的order by将覆盖前面的order by。 视图不能索引也不能关联触发器或默认值 视图可以和表同时使用
1.7修改视图
mysql desc v_student; # 查看结构mysql create or replace view v_student as select sno, sname, ssex, sage from
student; # 将age直接读取mysql alter view v_student as select sno, sname, ssex, sage from student where
ssex女;
Query OK, 0 rows affected (0.02 sec)mysql select * from v_student;
1.8删除视图
drop view [if exists] view_name;
2.索引
2.1什么是索引
索引是一种特殊的文件用来快速查询数据库表中的特定记录是提高数据库性能的重要方式 通俗的说数据库索引好比是一本书前面的目录能加快数据库的查询速度
2.2索引特点
索引是存放在模式schema中的一个数据库对象 索引在数据库中用来加速对表的查询 通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O 索引与表独立存放但不能独立存在必须属于某个表
2.3索引分类
按装算法分类Hash索引和BTree索引 按照功能分类 2.4索引优缺点
优点 索引可以提高检索数据的速度这也是创建索引的最主要的原因 对于有依赖关系的子表和父表之间的联合查询时可以提高查询速度 使用分组和排序子句进行数据查询时同样可以显著节省查询中分组和排序的时间。 缺点 创建和维护索引需要耗费时间耗费时间的数量随着数据量的增加而增加 每一个索引要占一定的磁盘存储空间 增加、删除和修改数据时要动态的维护索引会降低数据的维护速度
2.5创建索引
# 语法1
create table 表名 (字段名1 数据类型 [完整性约束条件…],字段名2 数据类型 [完整性约束条件…],[unique | fulltext | spatial] index | key[索引名] (字段名[(长度)] [asc | desc]));# 语法2
create [unique | fulltext | spatial] index 索引名
ON 表名 ( 字段名[(长度)] [asc | desc] );# 语法3
alter table 表名 add [unique | fulltext | spatial] index
索引名 (字段名[(长度)] [asc | desc]);
示例
# 创建表的同时创建普通索引
mysql create table index1_tb( id int, name varchar(20), sex boolean, index(id));# 创建表的同时创建唯一索引
mysql create table index2_tb( id int unique, name varchar(20), unique index
index2(id asc) );# 创建单列索引 (即普通的单列索引)
mysql create table index3_tb( id int, subject varchar(30), index
index3(subject(10)) );# 创建多列索引 (即普通的多列索引)
# 注意使用多列索引时一定要特别注意只有使用了索引中的第一个字段时才会触发索引。
mysql create table index4_tb( id int, name varchar(20), sex char(4), index
index4(name,sex) );
2.6查看索引
# 查询索引
show create table 表名 \G
# 查询某张表中索引情况
show index from table_name;
# 使用计划查询SQL使用索引情况
explain select * from 表名 where id1 \G
# 使用系统表查看所有索引
select * from mysql.innodb_index_stats a where a.database_name 数据库名’;
# 使用系统表查看单张表的所有索引
select * from mysql.innodb_index_stats a where a.database_name 数据库名 and
a.table_name like %表名%’;
示例
mysql show create table index1_tb \G
mysql show index from index3_tb;
mysql explain select * from index1_tb where id1 \G
# 注意possible_keys和key 这两个属性possible_keysMySQL在搜索数据记录时可以选用的各个索引
key实际选用的索引
2.7删除索引
drop index 索引名 on 表名