Skip to main content

MySQL

存储结构

MySQL是一个服务,一个 MySQL 服务可以管理多个数据库,一个数据库可以有多张表:

/*
MySQL服务:
└── 数据库: student
├── 表:frontend
│ ├── 列:id - 主键
│ ├── 列:course - 课程名称
│ └── 列:number - 课程人数

├── 表:golang
│ ├── 列:id - 主键
│ ├── 列:course - 课程名称
│ └── 列:number - 课程人数

└── 表:rust
├── 列:id - 主键
├── 列:course - 课程名称
└── 列:number - 课程人数
*/

一行数据就是一条数据记录,类似于 Excel 文档:

/*
表:frontend
+----+------------+---------+
| id | course | number | <-- 行数据:每行表示一条记录
+----+------------+---------+
| 1 | HTML | 25 | <-- 行数据:课程HTML,人数为25
| 2 | CSS | 30 | <-- 行数据:课程CSS,人数为30
| 3 | JavaScript | 35 | <-- 行数据:课程JavaScript,人数为35
+----+------------+---------+

表:golang
+----+------------+---------+
| id | course | number | <-- 行数据:每行表示一条记录
+----+------------+---------+
| 1 | Basics | 20 | <-- 行数据:课程Basics,人数为20
| 2 | Concurrency| 15 | <-- 行数据:课程Concurrency,人数为15
| 3 | WebDev | 10 | <-- 行数据:课程WebDev,人数为10
+----+------------+---------+

表:rust
+----+------------+---------+
| id | course | number | <-- 行数据:每行表示一条记录
+----+------------+---------+
| 1 | Ownership | 18 | <-- 行数据:课程Ownership,人数为18
| 2 | Traits | 12 | <-- 行数据:课程Traits,人数为12
| 3 | Async | 8 | <-- 行数据:课程Async,人数为8
+----+------------+---------+
*/

安装与连接

Mac 环境下可通过 homebrew 安装:

brew install mysql

可通过 下载地址 选择平台及安装进行可视化安装。

// mysql帮助手册
mysql --help

// 查看mysql版本
mysql --version

/*
-h 主机地址
-P 端口号
-u 用户名
-p 用户密码
如果MySQL服务器在本地,主机地址可以省略
如果服务器使用默认3306端口,端口号可以省略
*/
mysql -h 127.0.0.1 -P 3306 -u root -p root
mysql -u root -p root
// 密码采用暗文
mysql -u root -p

// 退出mysql
exit;
quit;
\q;

内置数据库

  • information_schema:保存关于 MySQL 服务器维护的所有其他数据库的信息,如数据库名、数据库的表、表字段的数据类型与访问权限等。
  • mysql:MySQL 系统数据库,保存登录用户名、密码以及每个用户的权限等。
  • performance_schhma:保存数据服务器性能的参数。
  • sys:通过视图的形式把 information_schemaperformance_schhma 结合起来,查询出更加让人容易理解的数据。

存储引擎

MySQL 有三种存储引擎:MyISAMInnoDBMemory

  • MyISAM 安全性低,不支持事务和外键,适合频繁插入和查询的应用。
  • InnoDB 默认的存储引擎,安全性高,支持事务和外键,适合对安全性、数据完整性要求较高的应用。
  • Memory 访问速度极快,但不会永久存储数据,适合对读写速度要求较高的应用。

创建一个数据库就会自动创建一个文件夹,在库里面创建一个表就会在指定的数据库文件夹中创建一个文件,创建表的时候自动创建的这个文件保存了这张表的结构。

InnoDB

如果表的存储引擎是 InnoDB,只要创建表就会自动创建一个文件,这个文件保存了这张表的结构,如果往表里面存数据,那么数据会被存储到上级目录的 ibdata1 文件中,如果存储的数据比较多,那么系统会自动创建 ibdata2ibdata3 文件。

MyISAM

如果存储引擎是 MyISAM,那么只要创建表就会自动创建三个文件:

  • .sdi 保存表的结构。
  • .MYD 保存表中存储的数据。
  • .MYI 保存表中的索引。

Memory

如果表的存储引擎是 Memory,那么只要创建表就会自动创建一个文件,这个文件保存了这张表的结构,此时不会像 InnoDB,MyISAM 将数据保存到文件中,而是直接保存到内存中。