背景

最近在使用spring-data-jpa操作mysql,在使用jpa的自动建表功能之后,处理多对多关系@ManyToMany的时候,spring-data-jpa会给中间表的两个字段都加上外键引用。当前使用的版本默认的数据库存储引擎为MyISAM。这种存储引擎是为数据库查询性能而生的,不支持外检、事务等一些高级数据库功能,所以spring-data-jpa会报错。因为本文所使用的是springboot所以解决的方法是在配置文件中修改hibernate的方言:

# set mysql engine asinneoDB

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

下面是两个存储引擎的区别:

构成上的区别

每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。 .frm文件存储表定义。 数据文件的扩展名为.MYD (MYData)。 索引文件的扩展名是.MYI (MYIndex)。 基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB

事务处理上方面

MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持InnoDB提供事务支持事务,外部键等高级数据库功能

SELECT,UPDATE ,INSERT, DELETE

如果执行大量的SELECT,MyISAM是更好的选择

如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表

DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。

对于使用的额外的InnoDB特性(例如外键)的表不适用对AUTO_INCREMENT的操作。MyISAM为INSERT和UPDATE操作自动更新这一列这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不能再利用。(当AUTO_INCREMENT列被定义为多列索引的最后一列,可以出现重使用从序列顶部删除的值的情况)。 AUTO_INCREMENT值可用ALTER TABLE或myisamch来重置 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引 更好和更快的auto_increment处理,如果你为一个表指定AUTO_INCREMENT列,在数据词典里的InnoDB表句柄包含一个名为自动增长计数器的计数器,它被用在为该列赋新值。 自动增长计数器仅被存储在主内存中,而不是存在磁盘上 , select count() from table,MyISAM只要简单的读出保存好的行数,注意的是,当count()语句包含 where条件时,两种表的操作是一样的 InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时。

mysql的两种存储方法_mysql的两种存储引擎相关推荐

  1. mysql几种安装方法_mysql的三种安装方式(详细)

    安装MySQL的方式常见的有三种: rpm包形式 通用二进制形式 源码编译 1,rpm包形式 (1) 操作系统发行商提供的 (2) MySQL官方提供的(版本更新,修复了更多常见BUG)www.mys ...

  2. 多线程有几种实现方法,同步有几种实现方法

    多线程有几种实现方法,同步有几种实现方法 多线程有两种实现方法:继承 Thread 类或者实现 Runnable 接口. 一.继承 Thread 类 //1.作为Thread的子类,并重写run方法. ...

  3. 多线程有几种实现方法?同步有几种实现方法

    多线程有几种实现方法?同步有几种实现方法 答:多线程的实现方法有继承Thread类,实现Runnable接口,实现Callable接口. 同步可以使用Synchronized关键字,也可以使用可重入锁 ...

  4. mysql设置用户密码的方法_mysql设置用户密码的几种方法

    本节我们讨论如何设置mysql用户密码: 首先我们应该知道Mysql数据库中的口令存储必须用password()函数加密它.因为在user表中是以加密形式存储口令,而不是作为纯文本.如果你没有加密,直 ...

  5. mysql text 函数的使用方法_MySQL空间数据操作:GeomFromText()和astext()函数报错解决...

    报错问题: 之前在向MySQL导入经纬度数据的时候,用GeomFromText()方法来将字符串格式的空间点坐标转化为Geometry类型,得到了如下的报错: FUNCTION db.GeomFrom ...

  6. 链表反转的两种实现方法,后一种击败了100%的用户!

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 链表反转是一道很基础但又非常热门的算法面试题,它也在<剑指Offer> ...

  7. 链表反转的两种实现方法,后一种击败了100%的用户

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 头图 |  CSDN 下载自东方IC 链表反转是一道很基础但又非常热门的算法面试题,它也在<剑指Offer>的第 2 ...

  8. mysql更改数据库数据存储目录_MySQL更改数据库数据存储目录

    MySQL数据库默认的数据库文件位于/var/lib/mysql下,有时候由于存储规划等原因,需要更改MySQL数据库的数据存储目录.下文总结整理了实践过程的操作步骤. 1:确认MySQL数据库存储目 ...

  9. mysql去重函数的使用方法_MySQL中使用去重distinct方法的示例详解

    一 distinct 含义:distinct用来查询不重复记录的条数,即distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而 ...

最新文章

  1. SAP HANA中的存储过程(sql procedure)
  2. 解决Mac下npm权限问题
  3. 面试官:为什么HTTPS是安全的?
  4. PHP 对象、数组间的转换
  5. day3.网络基础之网络协议
  6. Oracle中NUMBER类型如果不指定长度和小数点精度默认是多长
  7. ST发布世界上首款LoRa Soc单片机STM32WL
  8. Array.prototype.slice.call
  9. 计算机三维实体建模与应用教学要求,三维建模教学大纲.doc
  10. 点击select下拉框获取option的属性值
  11. 获取到某一方法的调用者的类名、方法名、命名空间
  12. iframe的2个问题
  13. python压缩文件操作_python处理zip压缩文件 | 学步园
  14. 【PHP学习】—数组的定义和遍历(三)
  15. 什么是字节 什么是数据包
  16. 不同操作系统查询硬盘序列号的方法
  17. 全国省份及其对应的城市字典
  18. NOIp2018停课集训总结
  19. 关于CORBA实现的介绍
  20. Trojan.DL.Win32.Hmir.hl的清除方法 采用驱动提供服务的木马病毒

热门文章

  1. oracle 修改sgamaxsize_Oracle修改表空间大小
  2. python中continue用法案例_记录今天学习python中for与while循环针对break和continue的用法...
  3. python中文字体下载_python中matlabplot和seaborn中文字体显示的一种解决方案
  4. python为什么需要编辑器_Python是个什么鬼?为什么设计大牛都在学它?!
  5. 将文件复制到ftp发生错误 请检查是否有权限_SE文件管理器2.8.6解锁完整功能版...
  6. php5.3.3php5.4如何支持zend,php5.3不支持ZendOptimizer的解决办法(Zend Guard Loader)
  7. appium java api文档_Appium常用API
  8. 计算机科学中抽象的作用,抽象释义
  9. pytorch 图像增强
  10. gitlab protected branch