事務不回滾、Springboot2.0中Hibernate預設建立的mysql表為myisam引擎問題
阿新 • • 發佈:2018-12-17
MyISAM:這個是預設型別,它是基於傳統的ISAM型別,ISAM是Indexed Sequential Access Method (有索引的順序訪問方法) 的縮寫,它是儲存記錄和檔案的標準方法。與其他儲存引擎比較,MyISAM具有檢查和修復表格的大多數工具。 MyISAM表格可以被壓縮,而且它們支援全文搜尋。它們不是事務安全的,而且也不支援外來鍵。如果事物回滾將造成不完全回滾,不具有原子性。如果執行大量的SELECT,MyISAM是更好的選擇。
InnoDB:這種型別是事務安全的。它與BDB型別具有相同的特性,它們還支援外來鍵。InnoDB表格速度很快。具有比BDB還豐富的特性,因此如果需要一個事務安全的儲存引擎,建議使用它。如果你的資料執行大量的INSERT或UPDATE,出於效能方面的考慮,應該使用InnoDB表,對於支援事物的InnoDB型別的表,影響速度的主要原因是AUTOCOMMIT預設設定是開啟的,而且程式沒有顯式呼叫BEGIN開始事務,導致每插入一條都自動Commit,嚴重影響了速度。可以在執行SQL前呼叫BEGIN,多條SQL形成一個事物(即使AUTOCOMMIT開啟也可以),將大大提高效能。
升級到Springboot2.0後,依然是使用jpa、Hibernate來操作mysql,發現Hibernate預設建立的表是myisam引擎,而不是innodb。新增下面的方言即可修改為innodb
spring: jpa: database: mysql show-sql: true hibernate: ddl-auto: update naming: # 遇到大寫字母 加”_”的命名 physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy # 無修改命名 # physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl database-platform: org.hibernate.dialect.MySQL5InnoDBDialect #不加這句則預設為myisam引擎