了解一下MYSQL官方数据库Sakila

环境准备

我们通过Docker快速的拉取一个环境,这样子对于学习来说成本比价低。直接参照https://hub.docker.com/r/mysql/mysql-server/ 来做就好了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 快速拉取一个mysql的image
➜ ~ docker pull mysql/mysql-server
Using default tag: latest
latest: Pulling from mysql/mysql-server
501550cfd5c0: Pull complete
e0509d775110: Pull complete
d5a01765d011: Pull complete
970507e942eb: Pull complete
Digest: sha256:0bb21c0f1aa9296e7deafacec5703b80e4d923dfdfcaa2efbe0c8377a8592128
Status: Downloaded newer image for mysql/mysql-server:latest
docker.io/mysql/mysql-server:latest

# 启动mysql容器
➜ ~ docker run --name=mysql1 -d mysql/mysql-server:latest
780c312f6fa1d3b001cb7c97fddb7df39fea61f27732b5fb9b59d5a29b12cfde

# 查看CONTAINER
➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
780c312f6fa1 mysql/mysql-server:latest "/entrypoint.sh mysq…" 59 seconds ago Up 58 seconds (healthy) 3306/tcp, 33060-33061/tcp mysql1

# 查看默认的密码
➜ ~ docker logs mysql1 2>&1 | grep GENERATED
[Entrypoint] GENERATED ROOT PASSWORD: enohmYS*ecvISAqYh@GafRoDP3v

# 直接登录进去
➜ ~ docker exec -it mysql1 mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 8.0.23

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

# 修改一下容易记忆的密码,方便下次来使用
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.01 sec)

这是我认为非常快速的一个环境搭建的方式。

数据准备

一般像Orace、MySQL这些好的软件都会提供一些官网的数据来让方便学习着来学习。https://dev.mysql.com/doc/index-about.html

http://static.cyblogs.com/Jietu20210127-205659@2x.jpg

那我们就下载sakila database来学习一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mysql> show tables;
+----------------------------+
| Tables_in_sakila |
+----------------------------+
| actor |//演员表
| address |//地址表
| category |//影片的分类
| city |//城市信息
| country |//国家信息
| customer |//观看影片的用户信息
| film |//影片信息
| film_actor |//影片演员关联表
| film_category |//影片分类关联表
| film_text |//影片的文本信息,更新film的时候通过触发器保持film_text的同步
| inventory |//库存信息
| language |//影片的语言
| payment |//租赁付款信息
| rental |//某个影片库存的租赁信息
| staff |//商店员工信息
| store |//影片的商店信息
+----------------------------+
22 rows in set (0.00 sec)

整体的来看一下数据的一个关系

http://static.cyblogs.com/sakila.png

通过Sakila了解一些索引问题

http://static.cyblogs.com/Jietu20210127-213735.jpg

这里会有一个非常奇怪的问题,就是第一条sql竟然走了idx_actor_last_name索引。

1
EXPLAIN  SELECT actor_id FROM actor WHERE actor_id + 1 = 4;

可以理解为是走的B+树,叶子节点里面刚好存储的是主键,而主键刚好是actor_id,select的时候刚好是主键一个值吗?

参考地址

如果大家喜欢我的文章,可以关注个人订阅号。欢迎随时留言、交流。如果想加入微信群的话一起讨论的话,请加管理员微信号:chengcheng222e,他会拉你们进群。

简栈文化服务订阅号