MySQL基础入门学习【14】存储引擎
查看数据表的创建命令:
【存储引擎】: MySQL可以将数据以不同的奇数存储在文件(内存)中,这种技术就成为存储引擎
每一种存储引擎都使用了不同的存储机制、索引技巧、锁定水平,最终提供广泛且不同的功能
在关系型数据库当中,数据的存储是以表的形式来实现的。所以存储引擎也可以称为表类型
【MySQL支持的存储引擎】:
MyISAM,
InnoDB,
Memory,
CSV,
Archive
【并发处理】:
并发控制: 当多个连接对记录进行操作时保证数据的一致性和完整性的技术。
例如两个用户同时登陆,其中一个要对某一行记录删除,而另一个用户恰好要读取这一行记录,
结果可能是正在读取信息的用户报错而退出,也可能得到一条与实际记录不符的信息。
解决这类经典问题的方法就是使用并发控制: 在处理并发读或并发写时,系统会使用一套锁系统来解决这个问题。
这个锁系统由两类【锁】来组成:
【共享锁(读锁)】: 在同一时间段内,多个用户可以读取同一个资源,读取过程中数据不会发生任何变化(相互不做干扰);
【排他锁(写锁)】: 在任何时候只能有一个用户写入资源,当进行写锁时会阻塞其他的读锁或者写锁操作(出于安全策略的考虑)。
【锁的颗粒】: 锁定时的单位。我们其实只需要对修改的数据精确加锁即可,而无需对所有资源均加锁。加锁只加最对的,而不是加最大的。
加锁会增加系统的开销: 我们通过锁策略在锁开销与数据安全之间寻求一种平衡
【表锁】:是一种开销最小的锁策略。 当用户针对某数据表进行操作时,用户即获得了对该表的写锁权限,写锁会禁止其他用户的读、写操作。这张表只能有一个锁。
【行锁】:是一种开销最大的锁策略,是支持最大并发操作处理的情况。这张表中有多少条记录就可能对每一个记录都有一个锁
【事务处理】:【事务】是数据库区别于文件系统的重要特征之一, 用于保证数据库的完整性。
例如,某个用户要通过网银给别人转200元,则操作如下:
1. 从当前账户减掉200元(账户余额大于等于200元);
2. 在对方账户增加200元。
两个过程应该作为一个整体出现,无论哪个过程出现了问题,都应该恢复到数据的原始状态。
【事务的特性——ACID】:
1. 原子性(Atomicity)
2. 一致性(Consistency)
3. 隔离性(Isolation)
4. 持久性 (Durability)
【外键和索引】: 【外键】是保证数据一致性的策略 (see http://www.cnblogs.com/jade-91/p/8672669.html)
【索引】是对数据表中一列或多列的值进行排序的一种结构,使用索引可以快速地访问数据表当中的特定信息,是进行记录快速定位的一种方法(类比书的目录)。
可分为普通索引、唯一索引、全文索引、btree索引、hash索引......
【各个存储引擎特点】
特点 | MyISAM | InnoDB | Memory | Archive |
存储限制 | 256TB | 64TB | 有 (由内存大小决定) | 无 |
事务安全 | - | 支持 | - | - |
支持索引 | 支持 | 支持 | 支持 | |
锁颗粒 | 表锁 | 行锁 | 表锁 | 行锁 |
数据压缩 | 支持 | - | - | 支持 |
支持外键 | - | 支持 | - | - |
此外, CSV是由逗号分隔的存储引擎,会在数据库的子目录中为每一表创建一个.csv文件(一种普通的文本文件),每一个数据行占用一个文本行,不支持索引
BlackHole: 黑洞引擎,写入的数据都会消失,一般用于做数据复制的中继。
一般最常用的存储引擎是MyISAM 和 InnoDB这两种存储引擎。
其中,MyISAM适用于事务的处理不多的情况;
InnoDB适用于事务处理比较多,需要有外键支持的情况。
大牛们也可以对数据引擎进行扩展。
【设置存储引擎】
【修改存储引擎的方法】:
方法一:通过修改MySQL配置文件实现: default-storage-engine = engine_name
方法二:通过创建数据表命令实现:
CREATE TABLE table_name (
...
...
) ENGINE = engine_name;
方法三:通过修改数据表命令实现
ALTER TABLE table_name ENGINE [=] engine_name;
[参考链接] https://www.imooc.com/learn/122