MySQL 可以将数据以不同的技术存储在文件(内存)中,这种技术就成为存储引擎。
每一种存储引擎使用不同的存储机制、索引技巧、锁定水平,最终提供广泛且不同的功能。
MySQL 支持的存储引擎:
- MyISAM
- InnoDB
- Memeroy
- CSV
- Archive
查看引擎
1 | SHOW CREATE TABLE t |
一些基本概念
并发处理
当多个连接对记录进行操作时,保证数据的一致性和完整性的技术,称为并发控制。
例如:
表中存储着商品信息,两个用户 A 和 B 同时登录,用户 A 要删除 id = 22 的记录,而用户 B 要读取 id = 22 的记录。会发生什么结果呢?
读取时报错或获得一条与实际记录不符合的信息。
解决这类问题的方法就是并发控制。
锁粒度
在处理并发读和并发写时,系统会使用一套“锁系统”来解决这个问题,包括两类锁:共享锁(读锁)和排他锁(写锁)。
共享锁:在同一个时间段内,多个用户可以读取同一个资源,读取过程中数据不会发生任何改变。
排他锁:在任何时候只能有一个用户写入资源,当进行写锁时会阻塞其他的读锁或者写锁操作。
MySQL 的锁策略(锁颗粒):
- 表锁:开销最小的锁策略
- 行锁:开销最大的锁策略,但也是支持最大并发的策略
事务处理
事务用于保证数据库的完整性。
例如:用户 A 通过网银向用户 B 转账 200 元,实现步骤:
1)从当前账户减掉 200 元 (账户余额大于等于 200 元)
2)在对方账户增加 200 元
这两个过程必须作为一个整体。
事务的特性(ACID):
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
外键和索引
外键:
- 保证数据一致性的策略
索引:
- 是对数据表中一列或多列的值进行排序的一种结构
索引分为:普通索引、唯一索引、全文索引、btree 索引、hash 索引
存储引擎的特点
特点 | MyISAM | InnoDB | Memory | Archive |
---|---|---|---|---|
存储限制 | 256TB | 64TB | 有 | 无 |
事务安全 | - | 支持 | - | - |
支持索引 | 支持 | 支持 | 支持 | |
锁颗粒 | 表锁 | 行锁 | 表锁 | 行锁 |
数据压缩 | 支持 | - | - | 支持 |
支持外键 | - | 支持 | - | - |
注:
- Memory 的存储限制依赖于内存大小
- CSV 为每一个数据行存储一个 CSV 文件,不支持索引
- BlackHole:黑洞引擎,写入的数据会消失,一般用做数据复制的中继。
修改存储引擎
通过修改 MySQL 配置文件
1 | default-storage-engine = 引擎名称 |
通过创建数据表命令
1 | CREATE TABLE 表名称 ( |
例如:
1 | CREATE TABLE tp1 ( |
查看方法:
1 | SHOW TABLE 'tp1' |
通过修改数据表命令
1 | ALTER TABLE 表名称 ENGINE [=] 引擎名称 |