`
bryan.liu
  • 浏览: 19978 次
  • 性别: Icon_minigender_1
  • 来自: suzhou
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

MYSQL 的 MyISAM 和 InnoDB 的困惑

阅读更多

今天用JPA生成数据表,虽然在Entity上已经配置好了一对多和多对一的关系,总是奇怪不能生成外键索引。

后来发现是MySQL的 storage engine 的问题。

默认的MyISAM是不支持外键的。

只有改成 InnoDB才支持外键

修改方法,找到 my.ini(在Linux中是my.cnf)在里面添加或修改(如果有的话)


附:

MyISAM和InnoDB的区别

存储引擎各自的一些特点

上面提到的四种存储引擎都有各自适用的环境,这取决于它们独有的一些特征。主要体现在性能、事务、并发控制、参照完整性、缓存、 故障恢复,备份及回存等几个方面


目前比较普及的存储引擎是MyISAM和InnoDB.而MyISAM又是绝大部分Web应用的首选。MyISAM与InnoDB的主要的不同点在于性能和事务控制上。

MyISAM是早期ISAM(Indexed Sequential Access Method,我现在用的MySQL5.0已经不支持ISAM了)的扩展实现,ISAM被设计为适合处理读频率远大于写频率这样一种情况,因此ISAM以及后来的MyISAM都没有考虑对事物的支持,排除了TPM,不需要事务记录,ISAM的查询效率相当可观,而且内存占用很少。MyISAM在继承了这类优点的同时,与时俱进的提供了大量实用的新特性和相关工具。例如考虑到并发控制,提供了表级锁,虽然MyISAM本身不支持容错,但可以通过myisamchk进行故障恢复。而且由于MyISAM是每张表使用各自独立的存储文件(MYD数据文件和MYI索引文件),使得备份及恢复十分方便(拷贝覆盖即可),而且还支持在线恢复。

所以如果你的应用是不需要事务,处理的只是基本的CRUD操作,那么MyISAM是不二选择

InnoDB被设计成适用于高并发读写的情况.使用MVCC(Multi-Version Concurrency Control)以及行级锁来提供遵从ACID的事务支持。InnoDB支持外键参照完整性,具备故障恢复能力。另外 InnoDB的性能其实还是不错的,特别是在处理大数据量的情况下,用官方的话说就是: InnoDB的CPU效率是其他基于磁盘的关系数据库存储引擎所不能比的。不过InnoDB的备份恢复要麻烦一点,除非你使用了4.1以后版本提供的Mulit-tablespace支持,因为InnoDB和MyISAM不同,他的数据文件并不是独立对应于每张表的。而是使用的共享表空间,简单的拷贝覆盖方法对他不适用,必须在停掉MYSQL后对进行数据恢复。使用Per-Table Tablespacesd,使其每张表对应一个独立的表空间文件,则情况要简单很多。

一般来说,如果需要事务支持,并且有较高的并发读写频率,InnoDB是不错的选择。要是并发读写频率不高的话,其实可以考虑BDB,但由于在MySQL5.1及其以后版本中,将不再提供BDB支持。这个选项也就没有了

分享到:
评论

相关推荐

    mysql安装使用说明文档

    对于新手用户来说,安装MySQL可能会感到困惑,因为安装后界面和操作位置可能不太直观。一般而言,可以使用Yum仓库进行MySQL的安装与升级,特别是在Linux/Unix平台下。安装过程中,用户需要配置合适的存储引擎,并...

    既然Mysql有内存引擎Memory,为什么还需要Redis

    但不知道大家是否有和我最初一样的困惑,既然MYSQL也有可以基于内存操作的数据引擎Memory,为什么还需要和Redis配合使用呢?接下来,我会和大家分享一下其中的原因。 什么是Memory引擎? Memory引擎是Mysql的内存...

    8个不得不说的MySQL陷阱

    5. 存储引擎混乱:MySQL支持多种存储引擎,如MyISAM和InnoDB,每个都有其特性和适用场景。这种多样性虽然提供了选择,但也会增加管理和选择合适的存储引擎的复杂性。 6. 盈利动机:MySQL最初是开源的,但在被甲骨文...

    分享8个不得不说的MySQL陷阱

    5、**存储引擎的多样化**:MySQL支持多种存储引擎,如MyISAM和InnoDB,这为特定场景提供了优化选项,但同时也增加了管理难度。在不同引擎间切换可能导致代码不兼容,增加了数据库维护的复杂性。 6、**盈利的动机**...

    mysql处理添加外键时提示error 150 问题的解决方法

    在MySQL中,遇到“Error 150”通常意味着在尝试创建外键...在创建表或执行ALTER TABLE语句时,最后添加指定的引擎和字符集(如示例中的ENGINE=INNODB DEFAULT CHARSET=utf8)也可以帮助解决因字符集不匹配导致的问题。

    MySQL优化表时提示 Table is already up to date的解决方法

    在某些情况下,更换存储引擎(如从MyISAM切换到InnoDB)也可能有助于解决性能问题。 5. **监控和调整**: 对数据库进行定期监控,了解表的使用情况,根据实际需求调整优化策略。例如,可以设置定期的优化计划,...

Global site tag (gtag.js) - Google Analytics