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 ...
随机推荐
- 再谈 iptables 防火墙的 指令配置
手机上使用localhost为什么不能访问? 电脑上使用localhost 访问主页的原理是 电脑上有网站资源和服务器相关程序apache等的支持, 同时在 电脑的hosts文件中 有 127.0.0 ...
- 【MVC】Spring MVC常用配置
一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 <!--conf ...
- Spring核心简介
Spring简介 Spring是一个开源.轻量级框架.在诞生之初,创建Spring的主要目的是用来替代更加重量级的企业级Java技术,尤其是EJB(Enterprise JavaBean).从最初的挑 ...
- hotmail 发送邮件 的服务器地址如下
hotmail的服务器地址如下: pop服务器地址:pop-mail.outlook.com smtp服务器地址:smtp-mail.outlook.com imap服务器地址:imap-mail.o ...
- log4j2打印Mybatis执行的SQL语句及SQL语句的执行时间
http://blog.csdn.net/zjq852533445/article/details/78320012
- Python-csv模块读写csv文件
import csv # 采用DictReader进行读写: # 读csv文件def get_data(self, from_file): test_data = [] with open(from_ ...
- Latex 算法过长 分页显示方法
参考: Algorithm tag and page break Latex 算法过长 分页显示方法 1.引用algorithm包: 2.在\begin{document}前加上以下Latex代码: ...
- HDU 5236 Article(概率DP)
http://acm.hdu.edu.cn/showproblem.php?pid=5236 题意:现在有人要在文本编辑器中输入n个字符,然而这个编辑器有点问题. 在i+0.1s(i>=0)的时 ...
- Java只给汉字转URLEncoder
public static String encode(String str, String charset) throws UnsupportedEncodingException { Patter ...
- c# 通过反射输出成员变量以及成员变量的值
/*** @Author rexzhao* 工具类 仅限于* public variable*/using System.Collections;using System.Collections.Ge ...