MySQL数据库MyISAM和InnoDB存储引擎的比较

MySQL数据库MyISAM和InnoDB存储引擎的比较

MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种。这里介绍关于这两种引擎的一些基本概念(非深入介绍)。

MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索,但不是事务安全的,而且不支持外键。每张MyISAM表存放在三个文件中:frm 文件存放表格定义;数据文件是MYD (MYData);索引文件是MYI (MYIndex)。

InnoDB是事务型引擎,支持回滚、崩溃恢复能力、多版本并发控制、ACID事务,支持行级锁定(InnoDB表的行锁不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,如like操作时的SQL语句),以及提供与Oracle类型一致的不加锁读取方式。InnoDB存储它的表和索引在一个表空间中,表空间可以包含数个文件。

主要区别:

  • MyISAM是非事务安全型的,而InnoDB是事务安全型的。
  • MyISAM锁的粒度是表级,而InnoDB支持行级锁定。
  • MyISAM支持全文类型索引,而InnoDB不支持全文索引。
  • MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。
  • MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。
  • InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。

应用场景:

  • MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
  • InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。

常用命令:

  (1)查看表的存储类型(三种):

  • show create table tablename
  • show table status from  dbname  where name=tablename
  • mysqlshow  -u user -p password --status dbname tablename

  (2)修改表的存储引擎:

  • alter table tablename type=InnoDB

  (3)启动mysql数据库的命令行中添加以下参数使新发布的表都默认使用事务:

  • --default-table-type=InnoDB

  (4)临时改变默认表类型:

  • set table_type=InnoDB
  • show variables like 'table_type'
转自:http://www.cnblogs.com/panfeng412/archive/2011/08/16/2140364.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于 Flowable,它使用了一个名为 Flowable Engine 的工作流引擎来管理流程。在 Flowable 中,可以通过自动创建数据库表的方式来初始化工作流引擎。 要自动生成 Flowable 引擎所需的数据库表,可以按照以下步骤操作: 1. 首先,确保你的应用程序已经配置了与数据库的连接。你需要提供数据库的连接信息,例如数据库类型、地址、用户名和密码等。 2. 在应用程序启动时,可以使用 Flowable 提供的 `ProcessEngineConfiguration` 类来创建和配置工作流引擎。在创建引擎配置实例时,可以通过调用 `setDatabaseSchemaUpdate` 方法来指定数据库表的自动更新策略。例如,可以将参数设置为 `ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE`,这样 Flowable 将自动创建和更新数据库表。 下面是一个简单的示例代码: ```java import org.flowable.engine.ProcessEngine; import org.flowable.engine.ProcessEngineConfiguration; public class FlowableTableGenerator { public static void main(String[] args) { // 创建工作流引擎配置实例 ProcessEngineConfiguration cfg = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration(); // 设置数据库连接信息 cfg.setJdbcUrl("jdbc:mysql://localhost:3306/flowable?useSSL=false&characterEncoding=utf8"); cfg.setJdbcUsername("your_username"); cfg.setJdbcPassword("your_password"); cfg.setJdbcDriver("com.mysql.jdbc.Driver"); // 设置自动更新数据库表策略 cfg.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); // 创建工作流引擎 ProcessEngine processEngine = cfg.buildProcessEngine(); // 输出引擎信息 System.out.println("Flowable version: " + ProcessEngine.VERSION); System.out.println("Database tables created"); } } ``` 在这个示例中,我们使用了 MySQL 数据库,并且设置了自动更新数据库表的策略为 `DB_SCHEMA_UPDATE_TRUE`。当程序运行时,Flowable 将会自动创建和更新数据库表。 请根据你的实际情况修改数据库连接信息,然后运行该代码,即可自动生成 Flowable 引擎所需的数据库表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值