重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Mysql数据库3种存储(MyISAM、MEMORY、InnoDB)引擎区别:
为广阳等地区用户提供了全套网页设计制作服务,及广阳网站建设行业解决方案。主营业务为网站制作、网站建设、广阳网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
1、Myisam是Mysql的默认存储引擎,当create创建新表时,未指定新表的存储引擎时,默认使用Myisam。MEMORY、InnoDB不是默认存储引擎。
2、InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
Mysql数据库3种存储(MyISAM、MEMORY、InnoDB)区别对比:
1、MyISAM
它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。
数据文件和索引文件可以放置在不同的目录,平均分配IO,获取更快的速度。要指定数据文件和索引文件的路径,需要在创建表的时候通过DATA DIRECTORY和INDEX DIRECTORY语句指定,文件路径需要使用绝对路径。
2、MEMORY
memory使用存在内存中的内容来创建表。每个MEMORY表实际对应一个磁盘文件,格式是.frm。MEMORY类型的表访问非常快,因为它到数据是放在内存中的,并且默认使用HASH索引,但是一旦服务器关闭,表中的数据就会丢失,但表还会继续存在。
默认情况下,memory数据表使用散列索引,利用这种索引进行“相等比较”非常快,但是对“范围比较”的速度就慢多了。因此,散列索引值适合使用在"="和"="的操作符中,不适合使用在""或""操作符中,也同样不适合用在order by字句里。如果确实要使用""或""或betwen操作符,可以使用btree索引来加快速度。
存储在MEMORY数据表里的数据行使用的是长度不变的格式,因此加快处理速度,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型。VARCHAR是一种长度可变的类型,但因为它在MySQL内部当作长度固定不变的CHAR类型,所以可以使用。
3、InnoDB
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
(1)自动增长列:
InnoDB表的自动增长列可以手工插入,但是插入的如果是空或0,则实际插入到则是自动增长后到值。可以通过"ALTER TABLE...AUTO_INCREMENT=n;"语句强制设置自动增长值的起始值,默认为1,但是该强制到默认值是保存在内存中,数据库重启后该值将会丢失。
可以使用LAST_INSERT_ID()查询当前线程最后插入记录使用的值。如果一次插入多条记录,那么返回的是第一条记录使用的自动增长值。对于InnoDB表,自动增长列必须是索引。如果是组合索引,也必须是组合索引的第一列,但是对于MyISAM表,自动增长列可以是组合索引的其他列,这样插入记录后,自动增长列是按照组合索引到前面几列排序后递增的。
(2)外键约束:
MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。
一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看:\x0d\x0a\x0d\x0a看你的mysql现在已提供什么存储引擎:\x0d\x0amysql show engines;\x0d\x0a\x0d\x0a看你的mysql当前默认的存储引擎:\x0d\x0amysql show variables like '%storage_engine%';\x0d\x0a\x0d\x0a你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):\x0d\x0amysql show create table 表名;
查看当前表的默认存储引擎,可以使用如下图所示的命令。查询之后,我们可以查看笔者这里这个表默认的存储引擎是:InnoDB.
如果我们想知道当前MySQL提供什么存储引擎,可以使用如下图所示的命令。通过查询我们知道,笔者所安装的MySQL提供了9种不同的存储引擎。
如果我们想要知道当前数据库默认的是什么存储引擎,可以使用如下图所示的命令。通过查询我们知道,笔者所安装的MySQL默认的存储引擎是InnoDB。
给一个新建的表指定特定的存储引擎,比如我们要新建一个“t2”表,我们希望这个表的存储引擎是MyISAM,具体操作如下图所示。
修改一个已经存在表的存储引擎,假设这里我们想要修改“t1”表的存储引擎。我们就可以按下图所示的命令来操作。执行之后,我们的t1表的存储引擎,就从默认的InnoDB变为了CSV.