MySQL常用存储引擎
引擎名称 |
事务 |
说明 |
MYISAM |
N |
MySQL5.6之前的默认引擎,最常用的非事务型存储引擎 |
CSV |
N |
以CSV格式存储的非事务型存储引擎 |
Archive |
N |
只运行查询和新增数据不允许修改的非事务型存储引擎 |
Memory |
N |
是一种易失性非事务型存储引擎 |
InnoDB |
Y |
最常用事务性存储引擎 |
NDB |
Y |
MySQL集群使用的内存型事务存储引擎 |
MYISAM
特点
- 非事务存储引擎
- 以堆表方式存储
- 使用表级锁
- 支持BTree索引,空间索引,全文索引
使用场景
CSV
特点
- 非事务型存储引擎
- 数据以CSV格式存储
- 所有列都不能为NULL
- 不支持索引
使用场景
Archive
特点
- 非事务型存储引擎
- 表数据使用zlib压缩
- 只支持Insert和Select
- 只允许在自增ID上建立索引
使用场景
Memory
特点
- 非事务型存储引擎
- 数据保存在内存中
- 所有字段长度固定
- 支持Btree和Hash索引
使用场景
InnoDB
特点
- 事务型存储引擎
- 数据按主键聚集存储
- 支持行级锁和MVCC
- 支持Btree和自适应Hash索引
- 支持全文和空间索引
使用场景
NDB
特点
- 事务型存储引擎
- 数据保存在内存中
- 支持行级锁
- 支持高可用集群
- 支持Ttree索引
使用场景
什么情况下InnoDB无法在线修改表
操作 |
语法 |
加全文索引 |
CREATE FULTEXT INDEX name ON table(column) |
加空间索引 |
ALTER TABLE geom ADD SPATIAL INDEX(g) |
删除主键 |
ALTER TABLE tb_name DROP PRIMARY KEY |
增加自增列 |
alert table t add column id int auto_increment not null primary key |
修改列类型 |
alter table t change c1 c1 NEW_TYPE |
修改字符集 |
alter table t character set = charset_name |
在线DDL存在的问题
- 有部分语句不支持在线DDL
- 长时间DDL操作会引起严重主从延迟
- 无法对DDL操作进行资源限制
如何更安全执行DDL
- pt-online-shema-change [OPTIONS]DSN
InnoDB如何实现事务
原理
特征 |
说明 |
原子性(A) |
一个事务的所有操作,或全部成功或全部失败 |
一致性(C) |
事务开始之前和事务结束只会,数据库保持完整性 |
隔离性(I) |
每个读写事务的对象和其他事务的操作对象相互分离,该事务提交前对其他事务都不可见 |
持久性(D) |
事务一旦提交,结果就是永久性,如果宕机也能恢复 |
实现方式
特征 |
说明 |
原子性(A) |
回滚日志(Undo log): 用于记录数据修改前的状态 |
一致性(C) |
重作日志(Redo log): 用于记录数据修改后的状态 |
隔离性(I) |
锁:用于资源隔离,分为共享锁和排他锁 |
持久性(D) |
重作日志(Redo log)+回滚日志(Undo log) |
INNODB锁
- 查询需要对资源加共享锁(S)
- 修改需要对资源加排他锁(X)
|
排他锁 |
共享锁 |
排他锁 |
不兼容 |
不兼容 |
共享锁 |
不兼容 |
兼容 |
欢迎扫描下方二维码,持续关注:
互联网工程师(id:phpstcn),我们一起学习,一起进步
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341