mySQL索引和视图实训答案_MySQL索引和视图

一、什么是索引?

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。

索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快

要注意的是,建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。

1、普通索引

普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE column = …)或排序条件(ORDER BY column)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。

1.1直接创建索引(length表示使用名称前1ength个字符)

CREATE INDEX index_name ON table_name(column_name(length))

1.2修改表结构的方式添加索引

ALTER TABLE table_name ADD INDEX index_name ON (column_name)

1.3创建表的时候同时创建索引

CREATE TABLE table_name (

id int(11) NOT NULL AUTO_INCREMENT ,

title char(255) NOT NULL ,

PRIMARY KEY (id),

INDEX index_name (title)

) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4;

1.4删除索引

DROP INDEX index_name ON table_name;

1.5建立复合索引 。

CREATE INDEX mytable_categoryid_userid  ON  mytable (category_id,user_id);

2、唯一索引

与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值(注意和主键不同)。如果是组合索引,则列值的组合必须唯一,创建方法和普通索引类似。

如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:一是简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率;二是MySQL会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,MySQL将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。

2.1创建唯一索引

CREATE UNIQUE INDEX index_name ON table_name(column_name)

2.2修改表结构

ALTER TABLE table_name ADD UNIQUE index_name ON (column_name)

2.3创建表的时候直接指定

CREATE TABLE table_name (

id int(11) NOT NULL AUTO_INCREMENT ,

title char(255) NOT NULL ,

PRIMARY KEY (id),

UNIQUE index_name (title)

);

3、主索引

必须为主键字段创建一个索引,这个索引就是所谓的”主索引”。主索引与唯一索引的唯一区别是:前者在定义时使用的关键字是PRIMARY而不是UNIQUE。

二、什么视图?

视图是一种虚拟的表,是从数据库中一个或者多个表中导出来的表。数据库中只存放了视图的定义,而并没有存放视图中的数据,这些数据存放在原来的表中。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。

1、视图的作用:

(1)使操作简便化;

(2)增加数据的安全性;

(3)提高表的逻辑独立性;

2、创建视图

CREATE [ ALGORITHM ={ UNDEFIEND | MERGE | TEMPTABLE }]

VIEW 视图名[ ( 属性清单) ]

AS SELECT 语句

[

WITH [ CASCADED | LOCAL ] CHECK OPTION ];

2.1在单表上创建视图

CREATE VIEW v1 AS SELECT * FROM

t_book;

CREATE VIEW v2 AS SELECT

bookName,price FROM t_book;

CREATE VIEW v3(b,p) AS SELECT

bookName,price FROM t_book;

2.2在多表上创建视图

CREATE VIEW v4 AS SELECT bookName,bookTypeName FROM t_book,t_booktype

WHERE t_book.bookTypeId=t_booktype.id;

CREATE VIEW v5 AS SELECT tb.bookName,tby.bookTypeName FROM t_book

tb,t_booktype tby WHERE tb.bookTypeId=tby.id;

3、查看视图3.1

DESCRIBE 语句查看视图基本信息

DESC v5;

3.2 SHOW TABLE STATUS 语句查看视图基本信息

SHOW TABLE STATUS

LIKE ‘v5‘;

3.3 SHOW CREATE VIEW 语句查看视图详细信息

SHOW TABLE STATUS

LIKE ‘t_book‘;

3.4 在views 表中查看视图详细信息

SHOW CREATE VIEW v5;

4、修改视图

4.1 CREATE OR REPLACE VIEW 语句修改视图

CREATE OR REPLACE [ ALGORITHM ={ UNDEFINED | MERGE | TEMPTABLE }]

VIEW 视图名[( 属性清单)]

AS SELECT

语句

[ WITH [

CASCADED | LOCAL ] CHECK OPTION ];

例如:

CREATE OR REPLACE VIEW v1(bookName,price)

AS SELECT bookName,price

FROM t_book;

4.2 ALTER 语句修改视图

ALTER [ ALGORITHM ={ UNDEFINED | MERGE | TEMPTABLE }]

VIEW 视图名[( 属性清单)]

AS

SELECT 语句

[ WITH [

CASCADED | LOCAL ] CHECK OPTION ];

例如:

ALTER VIEW v1 AS SELECT * FROM t_book;

5、更新视图

更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为视图是一个虚拟的表,其中没有数据。通过视图更新时,都是转换基本表来更新。更新视图时,只能更新权限范围内的数据。超出了范围,就不能更新。

5.1 插入(INSERT)

INSERT INTO v1 VALUES(NULL,‘java good‘,120,‘feng‘,1);

5.2 更新(UPDATE)

UPDATE v1 SET bookName=‘java very good‘,price=200 WHERE id=5;

5.3 删除(DELETE)

DELETE FROM v1 WHERE id=5;

6、删除视图

删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据;

DROP VIEW [ IF EXISTS ] 视图名列表[ RESTRICT | CASCADE ]

DROP VIEW IF EXISTS v4;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值