SQL 基础(四)

MySQL 可以将数据以不同的技术存储在文件(内存)中,这种技术就成为存储引擎。

每一种存储引擎使用不同的存储机制、索引技巧、锁定水平,最终提供广泛且不同的功能。

MySQL 支持的存储引擎:

  • MyISAM
  • InnoDB
  • Memeroy
  • CSV
  • Archive

查看引擎

1
2
3
SHOW CREATE TABLE t

// ...ENGIN = InnoDB DEFAULT CHARSET=utf8

一些基本概念

并发处理

当多个连接对记录进行操作时,保证数据的一致性和完整性的技术,称为并发控制。

例如:

表中存储着商品信息,两个用户 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
2
3
CREATE TABLE 表名称 (
...
) ENGINE = 引擎名称

例如:

1
2
3
CREATE TABLE tp1 (
s1 VARCHAR(10)
) ENGIN = MyISAM

查看方法:

1
SHOW TABLE 'tp1'

通过修改数据表命令

1
ALTER TABLE 表名称 ENGINE [=] 引擎名称