MySQL表类型和存储引擎
一、基本介绍

从事务安全性的角度,可以把存储引擎分为两大类:
事务安全: BDB和innodb;
事务非安全性: myisam 和 memory

二、存储引擎的比较图

看你的mysql当前默认的存储引擎:
mysql> show variables like '%storage_engine%';

select version();
在配置文件my.cnf中的 [mysqld] 下面加入 default-storage-engine = 存储引擎
三、各个存储引擎的特点说明
MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求或以select,insert为主【使用myisam】;产生碎片处理. optimize table 表名;
MyISAM的表可能会损坏,check table 表名 检查myisam表的健康;
Repair table 表名 修复一个损坏的myisam表。表损坏可能导致数据库异常重新启动,需尽快修复并尽可能确认损坏原因;
每个MyISAM在磁盘上存储成3个文件,其文件名都和表名相同,但扩展名分别是:
.frm(存储表定义);
.MYD(MYData,存储数据);
.MYI(MYIndex,存储索引);
数据文件和索引文件可以防止在不同的目录,平局分布IO,获得更快的速度。
数据文件和索引文件可以在创建表结构的时候通过 DATA DIRECTORY 和 INDEX DIRECTORY 来指定,必须是绝对路径,并具有访问权限,例如:
CREATE TABLE test (
id int(11),
title varchar(20)
) ENGINE = MyISAM DATA DIRECTORY = '/data/db1' INDEX DIRECTORY = '/data/db2';
举例说明:

InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全,支持外键,(delete,update)操作;但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引;
Innodb通过设置 Innodb_file_per_table 参数,设置innodb为独立表空间模式,这样每个数据库的每个表都会生成一个独立的ibd文件,用于存储表的数据和索引,一定程度上减轻innodb表的空间回收问题。另外,在删除大量数据后,innodb可通过alter table xxx engine=innodb,但不修改引擎的方式来回收不用的空间。
1.自动增长列
Alter table *** auto_increment = n; 强制设置自动增长列的初始值,默认从1开始;注意,强制设置的默认值保留在内存中,重启后丢失,需重新设置;
LAST_INSERT_ID() 查询当前线程最后插入记录使用的值;如果一次插入多条记录,返回的是第一条记录使用的自增长值;
2.外键约束(MySQL中支持外键的只有InnoDB引擎)
创建外键时,要求父表必须有对应的索引,子表在创建外键时也会自动创建对应的索引;
创建索引时,可以指定在删除、更新父表时,对子表进行的相应操作,包括 RESTRICT、CASCADE、SET NULL 和 NO ACTION。
其中RESTRICT(默认)和NO ACTION相同,指限制在子表有关联记录的情况下父表不能更新;
CASCADE表示父表在更新或者删除时,更新或者删除子表对应记录;
SET NULL表示父表在更新或者删除的时候,子表的对应字段被SET NULL;
最后两种方式需谨慎,可能会因为错误的操作导致数据丢失;
某个表被其他表创建了外键参照,那么该表的对应索引或主键禁止被删除;
Set foreign key checks=0;暂时关闭外键检查
创建外键语句:
Constraint ‘外键名’ foreign key (子表字段) references 父表名(字段) ON delete restrict ON update cascade; // 主表删除记录时,子表有记录则不允许删除;主表更新记录时,子表有对应记录,则子表更新;
Alter table add foreign key (字段) references 主表(列);
3.存储方式
两种方式存储表和索引
使用共享表空间存储,创建的表的表结构保存在.frm文件中,数据和索引保存在innodb_data_home_dir和innodb_data_file_path定义的表空间中,可以是多个文件。
使用多表空间存储,表结构仍保存在.frm文件中,但每个表的数据和索引单独保存在.Idb中。如果是分区表,则每个分区对应单独的.Idb文件,文件名是“表名+分区名”,可以在创建分区的时候指定每个分区的数据文件的位置,来将表的IO均匀分布在多个磁盘上;
MEMORY存储引擎使用存在内存中的内容来创建表。 每个MEMORY表只实际对应一个磁盘文件.frm。MEMORY类型的表访问非常得快,因为它的数据是放在内存(RAM)中的,并且默认使用HASH索引,大小受max_heap_table_size约束。但是一旦服务关闭,表中的数据就会丢失掉, 表的结构还在;
特点是: 数据都在内存,访问速度快, 但是你的数据库一旦重启,数据丢失了.- 所有我们的memory 存储引擎适合存放 频繁变化的小数据,比如用户的在线状态.
举例说明:

MERGE是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,MERGE表本身并没有数据。INSERT_METHOD子句定义插入的表,有3个不同的值,FIRST或LAST值使得merge插入操作被相应地作用在第一或最后一个myisam表上,不定义这个子句或者定义为NO,表示不能对这个MERGE表执行插入操作
Create table payment_all(
Country_id smallint,
Amout decimal(15,2),
Payment_date datetime,
)engine=merge union=(payment_2017,payment_2018) INSERT_METHOD=LAST;
第三方存储引擎,如高写性高压缩的TokuDB,使用日志数据,历史数据等…
四、如何选择适当的存储引擎

五、修改表的存储引擎指令

MySQL表类型和存储引擎的更多相关文章
- MySQL表类型和存储引擎版本不一致解决方法
使用的是老版本的mysql客户端Navicate 8 ,mysql 服务端用的是mysql5.6的版本,在修改版本引擎的时候出现版本不对; mysql error ‘TYPE=MyISAM’ 解决办法 ...
- mysql————表类型(存储引擎)的选择
表类型(存储引擎)的选择 7.1 mysql存储引擎概述 插件式存储引擎是mysql数据库最重要的特性之一,用户可以根据应用的需要选择ruhr存储和索引数据,是否使用事务等. InnoDB和BDB提供 ...
- MySql(一)表类型(存储引擎)
MySql(一)表类型(存储引擎) 一.MYSQL存储引擎概述 二.存储引擎的特性对比 2.1 MyISAM 2.2 InnoDB 2.2.1 自动增长列 2.2.2 外键约束 2.2.3 存储方式 ...
- mysql 库操作、存储引擎、表操作
阅读目录 库操作 存储引擎 什么是存储引擎 mysql支持的存储引擎 如何使用存储引擎 表操作 创建表 查看表结构 修改表ALTER TABLE 复制表 删除表 数据类型 表完整性约束 回到顶部 一. ...
- MySQL数据库篇之存储引擎
主要内容: 一.数据引擎 二.MySQL支持的存储引擎 三.使用存储引擎 1️⃣ 什么是存储引擎? MySQL中建立的库----> 文件夹,库中建立的表----->文件. 现实生活中我们用 ...
- mysql三-1:理解存储引擎
一.什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处 ...
- Mysql表类型(存储引擎)的比较
面试官问:你知道mysql有哪些存储引擎,区别是啥? 我:一脸闷逼,于是乎下来补一补,以作备查 1.和大多数数据库不同,MySQL 中有一个存储引擎的概念,针对不同的存储需求可以选择最优的存储引擎. ...
- Mysql表的七种引擎类型,InnoDB和MyISAM引擎对比区别总结
InnoDB和MyISAM区别总结 我用MySQL的时候用的是Navicat for MySQL(Navicat for mysql v9.0.15注册码生成器)操作库.表操作的,默认的表就是Inno ...
- 数据库 MySQL 之 表操作、存储引擎
数据库 MySQL 之 表操作.存储引擎 浏览目录 创建(复制) 删除 修改 查询 存储引擎介绍 一.创建(复制) 1.语法: 1 2 3 4 5 CREATE TABLE 表名( 字段名1 ...
随机推荐
- tp框架中的一些疑点知识-3
rewrite就是伪静态, 伪静态就是 rewirte, 可以把入口地址隐藏掉. 兼容模式就是 普通模式 和 pathinfo模式的 结合, 前面是普通模式 ?s= , 后面的 模块/控制器/操作和参 ...
- 连号区间数|2013年蓝桥杯B组题解析第十题-fishers
连号区间数 小明这些天一直在思考这样一个奇怪而有趣的问题: 在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是: 如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递 ...
- 更新32位Spyder从3.0.0-> 3.2.3
https://stackoverflow.com/questions/51222550/how-to-update-spyder-3-3-0 It works!! 1. went to the An ...
- String comparison is too slow in R language
## String comparison is too slow in R language ## it will take 3 minutes, it is too slow date() strA ...
- Activit工作流学习例子
看了网上一些文章,动手操作了一遍,终于学会了Activit的一些常规使用. 一.Eclipse中的Activiti插件安装 Activiti有一个Eclipse插件,Activiti Eclipse ...
- mysql中between...and..的使用,及时间范围的查询
博主原创,转载注明出处: 在mysql应用中,以范围进行查询的很多是以时间范围作为条件进行范围查询的,时间范围查询有 很多种写法,首先总结一下between....and...的使用方法: <s ...
- 操作 html 的时候是使用 dom 方法还是字符串拼接?
比如一个列表里面有很多个 li,要给他们加上数据.但多少个 li 是不确定的,由后台数据确定.这时候,就要动态生成 html 内容了. 那么,这个过程, 是使用 += 方法把标签.数据进行一个个的字符 ...
- 集成算法——Ensemble learning
目的:让机器学习效果更好,单个不行,群殴啊! Bagging:训练多个分类器取平均 Boosting:从弱学习器开始加强,通过加权来进行训练 (加入一棵树,比原来要强) Stacking:聚合多个分类 ...
- VR外包公司—2016中国VR开发者论坛第一期
由VR界网和暴风魔镜联合举办的2016中国VR开发者论坛第一期已于3月2日下午5点在吉林动画学院圆满落幕,本次论坛云集了VR相关领域的精英,邀请了VR社交<极乐王国>.暴风魔镜.南京睿悦. ...
- python shelve模块
#coding=utf- import shelve f = shelve.open("shelve_test") f['info'] = "alex" f[, ...