您的位置:首页 > 数据库 > MySQL

mysql的索引、视图

2016-08-13 19:33 148 查看
一、mysql的索引

1、概念:是一种数据库对象,目的是为了加速查询。

2]、原理:类似于书的目录,查询时先通过查找索引来加速查询的速度

3、索引的类型:

1)主键索引:要求加索引的列不能为null,必须唯一。创建主键时自动生成主键索引。

2)外键索引:创建外键时自动生成外键索引。

3)唯一索引:要求加索引的列不能重复,可以为null。

4)全文索引:对超长文本(text、varchar等)列加全文索引。

5)常规索引:可以包含重复值,可以为null。

4、 创建索引:给某列加上索引,create index <索引名> 
<列名> on  <表名> 。

1)添加表时添加索引

CREATE TABLE employee (
id int(11) NOT NULL,
name varchar(255) default NULL,
age int(11) default NULL,
salary decimal(10,0) default NULL,
address varchar(255) default NULL,
depId int(11) default NULL,
bossId int(11) default NULL,
PRIMARY KEY (id),
KEY fk1_name (depId),
index age_index(age),#为age添加索引
index empid_index(depId,bossId)#为depId,bossId两列同时添加索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8;2)修改表时添加索引
alter table employee
add index name_index(name);
3)create index 创建索引

创建唯一索引
create unique index u_index
on employee(name) #为employee的name列再添加唯一索引5、查看索引
show indexes from employee;//查看employee表的所有索引6、删除索引(维护索引时使用,先删除再添加)
1)使用alter table删除

alter table employee
drop index name_index;2)使用drop index删除
drop index u_index
on employee;
7、创建和使用全文索引

1)创建全文搜索,使用关键字fulltext。
-- 添加全文索引 为name添加全文索引
alter table employee
add fulltext(name);注意:当数据库的类型是INNODB,则不能添加全文搜索,需要把数据库或表INNODB改成MyISAM,把表改为MyISAM:
ALTER TABLE employee TYPE = MyISAM;更多方法参考:http://www.cnblogs.com/liveandevil/archive/2012/08/10/2631601.html

2)使用全文索引
select * from employee where match(name) against ('que');二、mysql的视图view(虚表)
1、概念:存放某一个查询的结果,是一个只读的表。可用于隐藏真实列名,保护数据。

2、创建视图

1)查询一张表的所有数据来创建视图

-- or replace 可选,表示如果存在就替换
create or replace view v_emp
as select * from employee;2)对表进行条件过滤后的结果来创建视图,并对视图的列名进行命名
create or replace view v_name(员工编号,员工姓名)
as select id,name from employee;3、查询视图
select * from v_name;4、不可更新视图的条件:
1)视图的列中不能有聚合函数:sum,max,min,avg,count。

2)视图的列中不能有distinct,Group by having。

3)视图中不能有子查询。

如下视图不可更新:

create or replace view v_age
as
select max(age) from employee group by bossId;5、可更新视图(不满足不可更新视图的条件则可更新),原理:先更新(添加、修改、删除)数据到视图的底层表(视图中用到的表)中。

1)添加数据:
-- 视图insert操作 先添加数据到视图的底层表(视图中用到的表)中
insert into v_emp values(121,'view',29,20000,'南京',103,104); 2)修改数据:(视图update操作)
update v_emp set age=56 where id=121;3)删除数据:
delete from v_emp where id=106;6、管理视图(对可更新视图、不可更新视图的管理)
1)更改视图
alter view v_age as select age from employee;2)删除视图
drop view if exists v_age;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: