MySQL(11):存储引擎
1.存储引擎是什么?
MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
例如,如果你在研究大量的临时数据,你也许需要使用内存MySQL存储引擎。内存存储引擎能够在内存中存储所有的表格数据。又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)。
这些不同的技术以及配套的相关功能在 MySQL中被称作存储引擎(也称作表类型)。 MySQL默认配置了许多不同的存储引擎,可以预先设置或者在MySQL服务器中启用。你可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储你的信息、如何检索这些信息以及你需要你的数据结合什么性能和功能的时候为你提供最大的灵活性。
2.下面是MySQL数据库中常用的存储引擎:
我们发现这些存储引擎功能特性不相同,现实应用中,我们根据我们的需求选择不同的存储引擎。
3. (1)查询我们MySQL中所有的存储引擎:
show engines;(或者show engines\G)
如下图:
由上面知道MySQL数据库默认存储引擎是InnoDB(安装版MySQL默认InnoDB,免安装版为MyISAM)
也可以使用show variables like 'have%';
Variable_name参数表示存储引擎的名字,Values参数表示MySQL数据库管理系统是否支持该存储引擎,其中值YES表示支持,值NO表示不支持,值DISABLED表示支持但是没有开启。
(2)查询默认存储引擎
(3)修改默认存储引擎
手动修改:
-->1.首先打开my.ini配置文件,关于"[mysqld]"组的内容如下:
#服务器端参数配置
#SERVER SECTION
…………
[mysqld]
#服务器端的端口号
port=3306
#MySQL数据库服务器的安装目录
basedir =basedir="E:/software/PHP/mysql server 5.5.15/"
#MySQL数据库数据文件的目录
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
#MySQL服务器端的字符集
character-set-server=utf8
#MySQL服务器的存储引擎
default-storage-engine=INNODB
-->2. 如果想要修改存储引擎,只需要修改[mysqld]组中的default-storage-engine参数。即如果想设置默认存储引擎为MyISAM,只需要修改成:
default-storage-engine="MyISAM" 即可实现
-->3. 重启MySQL即可
(4). 创建表的时候定义表对应的存储引擎:
进入数据库数据文件目录,找到刚刚创建的room表,如下:
上面我们可以发现,一个默认InnoDB存储引擎,存储表格时候存在一个文件(比如这里的:user1.frm)。
一个MySIAM存储引擎,存储表格时候存在3个文件(比如这里的:room.frm,room.MYD,room.MYI)。
•对应于MySIAM存储引擎:
(1) .frm是表的结构文件
(2) .MYD是表保存数据的文件
(3) .MYI是表保存索引的文件
•对应于InnoDB存储引擎:
(1) .frm是表的结构文件
(2) ibdata1是InnoDB保存数据的文件(区别于MySIAM)
(5)InnoDB 和 MyISAM 存储引擎的区别 ?
区别1:两者保存文件 的方式不同。
MySIAM,一个表,三个文件。Tbl_name.frm(结构),Tbl_name.MYD(数据),Tbl_name.MYI(索引)。
InnoDB,一个表,一个文件。Tbl_name.frm(结构),所有的InnoDB表,都是使用相同的InnoDB存储空间(就是上面的ibdata1)在保存数据和 索引。
区别2:InnoDB不支持FULLTEXT类型的索引。
区别3:InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
区别4:.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
区别5:.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
区别6:.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
(6)选择存储引擎的依据
• 性能
• 功能