数据库原理与应用 第 7 章 · 上机三
课程第 7 章上机三 先看看建索引唯一索引建不成建表时带事后补删索引连起来 版式
第 7 章 视图和索引 · 上机三

索引的建、看、删

七道题,三种建法各写一遍,再亲手撞一次重名、一次重复值、一次视图建索引。
已完成 0 / 7
本 次 上 机 题 目
  1. 01这几张表上已经有哪些索引
  2. 02给姓名建一个前缀降序索引
  3. 03两列绑在一起不许重复
  4. 04重复值多的列上建不了唯一索引
  5. 05建表语句里直接写索引
  6. 06表建好了再加索引
  7. 07两条命令都能删,再撞两个错
  8. 连续练习:给选课表配一套索引
01
第 7 章 · 上机三

这几张表上已经有哪些索引

主键和外键都已经自动带了索引,不用自己建。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲命令就行。回车执行,也可以用下面的按钮。
mysql>

重 点

sc 的主键是两列,所以它在 SHOW INDEX 里占两行,靠 Seq_in_index 分先后。

知道更多

回显有十五列,屏幕装不下就按一下右上角的上下版式,正好整屏放下。

想一想

sc 上一共有几个索引?

02
第 7 章 · 上机三

给姓名建一个前缀降序索引

只拿姓名的前六个字节建,而且倒着排。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲命令就行。回车执行,也可以用下面的按钮。
mysql>

重 点

回显里 Sub_part 是 6,Collation 是 D,正是命令里那两个参数。

练一练

建了这个索引之后,DESC s 里 sn 那一行的 Key 列会变成什么?
  1. APRI
  2. BUNI
  3. CMUL
答案 C

普通索引的第一列在 DESC 里显示 MUL,表示这一列上可以有重复值。

03
第 7 章 · 上机三

两列绑在一起不许重复

复合唯一索引既提速,又顺带挡住重复。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲命令就行。回车执行,也可以用下面的按钮。
mysql>

重 点

第一条插入报 1062,第二条能过,因为课时不同两列合起来就不重复了。

记牢它唯一索引两件事

  1. 查得更快
  2. 顺带挡重复
  3. 空值不算重复
04
第 7 章 · 上机三

重复值多的列上建不了唯一索引

八个学生只有四种专业,唯一索引建不起来。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲命令就行。回车执行,也可以用下面的按钮。
mysql>

重 点

唯一索引报 1062 建不成,换成普通索引就建上了,两者的差别只在许不许重复。

知道更多

重复值这么多的列,普通索引也没什么用,八行里一筛就命中两三行。

05
第 7 章 · 上机三

建表语句里直接写索引

教室编号加教学楼名两列合起来唯一。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲命令就行。回车执行,也可以用下面的按钮。
mysql>

重 点

最后一条报 1062,两列合起来重了,单看楼名重复是允许的。

练一练

cid 没有写在任何 INDEX 里,它上面有索引吗?
  1. A没有
  2. B有,主键自带一个唯一索引
答案 B

PRIMARY KEY 一写下去,MySQL 就已经建好一个名叫 PRIMARY 的唯一索引。

06
第 7 章 · 上机三

表建好了再加索引

ALTER TABLE 补一个,再撞一次索引重名。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲命令就行。回车执行,也可以用下面的按钮。
mysql>

重 点

第四条报 1061,同一张表上索引名不许重复,换个名字就过了。

想一想

同一列上建两个名字不同的索引,机器会拦吗?

07
第 7 章 · 上机三

两条命令都能删,再撞两个错

删索引不动数据,但视图上压根建不了索引。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲命令就行。回车执行,也可以用下面的按钮。
mysql>

重 点

删不存在的索引报 1091,给视图建索引报 1347,最后一条证明数据一行没少。

知道更多

课件说给视图建索引能提速,那是标准 SQL 的说法,MySQL 不支持这件事。

第 7 章 · 上机三

连续练习:给选课表配一套索引

按查询的需要建,建完自己看一眼。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲命令就行。回车执行,也可以用下面的按钮。
mysql>

重 点

第二条是复合索引,按学院筛能用上它,只按专业筛就用不上了。

知道更多

写不出来就回到讲义第 22 页到第 29 页,把那几个例子再敲一遍。

保山学院·人工智能教研室·曹鼎鼎