`
have_life
  • 浏览: 150214 次
社区版块
存档分类
最新评论

mysql中engine=innodb和engine=myisam的区别

阅读更多
最开始用MySQL Administrator建数据库的时候,表缺省是InnoDB类型,也就没有在意。后来用Access2MySQL导数据的时候发现只能导成 MyISAM类型的表,不知道这两种类型有什么区别,就去查了查。原来是MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。 MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。这 样就可以根据数据表不同的用处是用不同的存储类型。
另外,MyISAM类型的二进制数据文件可以在不同操作系统中迁移。也就是可以直接从Windows系统拷贝到linux系统中使用。

修改:

ALTER TABLE tablename ENGINE = MyISAM ;

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打 开也可以),将大大提高性能。

===============================================================
1. 4.0以上mysqld都支持事务,包括非max版本。3.23的需要max版本mysqld才能支持事务。

2. 创建表时如果不指定type则默认为myisam,不支持事务。
可以用 show create table tablename 命令看表的类型。

2.1 对不支持事务的表做start/commit操作没有任何效果,在执行commit前已经提交,测试:
执行一个msyql:
use test;
drop table if exists tn;
create table tn (a varchar(10)) type=myisam;
drop table if exists ty;
create table ty (a varchar(10)) type=innodb;

begin;
insert into tn values('a');
insert into ty values('a');
select * from tn;
select * from ty;
都能看到一条记录

执行另一个mysql:
use test;
select * from tn;
select * from ty;
只有tn能看到一条记录
然后在另一边
commit;
才都能看到记录。

3. 可以执行以下命令来切换非事务表到事务(数据不会丢失),innodb表比myisam表更安全:
   alter table tablename type=innodb;

3.1 innodb表不能用repair table命令和myisamchk -r table_name
但可以用check table,以及mysqlcheck [OPTIONS] database [tables]

4. 启动mysql数据库的命令行中添加了以下参数可以使新发布的mysql数据表都默认为使用事务(
只影响到create语句。)
--default-table-type=InnoDB

测试命令:
use test;
drop table if exists tn;
create table tn (a varchar(10));
show create table tn;

5. 临时改变默认表类型可以用:
set table_type=InnoDB;
show variables like 'table_type';
或:
c:/mysql/bin/mysqld-max-nt --standalone --default-table-type=InnoDB


link:http://blog.csdn.net/lingyi_xu/article/details/5393791
分享到:
评论

相关推荐

    mysql中engine=innodb和engine=myisam的区别介绍

    若想将不支持事务的MyISAM表转换为InnoDB,可以使用`ALTER TABLE tablename ENGINE = InnoDB`,数据不会丢失,但请注意,InnoDB表不能使用`REPAIR TABLE`命令或`myisamchk -r`工具,而是需依赖`CHECK TABLE`或`mysql...

    mysql更改引擎(InnoDB,MyISAM)的方法

    mysql默认的数据库引擎是MyISAM,不支持事务和外键,也可使用支持事务和外键的InnoDB。 查看当前数据库的所支持的数据库引擎以及默认数据库引擎 数据库支持的引擎和默认数据库引擎代码: 代码如下:show engines; ...

    MyISAM引擎与InnoDB引擎性能的对比

    MySQL数据库系统提供了多种存储引擎,其中最常用的两种是MyISAM和InnoDB。它们各自具有独特的特性和适用场景,理解二者的性能差异对于优化数据库设计至关重要。 MyISAM引擎是MySQL早期的默认存储引擎,以其高速度和...

    MYSQL中 TYPE=MyISAM 错误的解决方法

    MyISAM和InnoDB是MySQL中最常见的两种存储引擎,它们各有优缺点。MyISAM以其轻量级、快速的查询性能和较小的内存占用受到青睐,但它不支持事务处理和行级锁定,这意味着在并发操作下可能会出现数据一致性问题。而...

    mysql执行sql文件报错Error: Unknown storage engine‘InnoDB’的解决方法

    在MySQL数据库中,InnoDB是一个重要的存储引擎,它支持事务处理、行级锁定以及外键约束,常用于处理高并发和大数据量的应用场景。然而,当你尝试执行一个依赖于InnoDB存储引擎的SQL文件时,如果系统报出“Error: ...

    mysql报错:MySQL server version for the right syntax to use near type=InnoDB的解决方法

    在使用MySQL数据库进行表结构创建或修改的过程中,有时可能会遇到这样的错误提示:“MySQL server version for the right syntax to use near 'type=InnoDB' at line 1”。这个错误通常表明在SQL语句中使用的语法与...

    mySql 存储引擎 启用 Innodb

    本文将详细介绍如何在MySQL中启用InnoDB存储引擎,并对比分析InnoDB与其他存储引擎(如MyISAM)之间的主要差异。 #### 二、InnoDB简介 InnoDB是MySQL数据库的一种默认存储引擎,自MySQL 5.5版本开始,默认启用...

    MYSQL无法启动提示: Default storage engine (InnoDB) is not available的解决方法

    ### MySQL无法启动提示:“Default storage engine (InnoDB) is not available”的解决方法 #### 背景介绍 MySQL是一款广泛使用的开源关系型数据库管理系统。它提供了多种存储引擎,包括MyISAM、InnoDB等,每种引擎...

    MySql中启用InnoDB数据引擎的方法.docx

    MyISAM和InnoDB的主要区别在于: 1. 事务处理:MyISAM不支持事务,而InnoDB提供完整的事务处理功能。 2. 性能:MyISAM通常在读取速度上优于InnoDB,但在写入和事务处理方面,InnoDB可能更胜一筹。 3. NULL列索引:...

    MySQL存储引擎MyISAM与InnoDB区别总结整理

    在MySQL中,MyISAM和InnoDB是最常见的两种存储引擎,它们各自有独特的特性和适用场景。 首先,我们来看一下MySQL默认存储引擎的变迁。在MySQL 5.1之前的版本,MyISAM是默认的存储引擎,它以快速读取和较小的内存...

    InnoDB的奥秘:深入探索MySQL的InnoDB存储引擎特性

    在 MySQL 中启用和配置 InnoDB 引擎非常简单,可以通过配置文件或命令行完成: - **设置 InnoDB 为默认存储引擎**:`SET DEFAULT_STORAGE_ENGINE=INNODB;` - **创建 InnoDB 表**: ```sql CREATE TABLE users ( ...

    关于Mysql数据库还原修改存储引擎为INNODB引起的错误问题分析.pdf

    综上所述,解决“Unknown/unsupported storage engine: InnoDB”的问题通常涉及检查MySQL版本、配置文件、依赖项和日志。在修复过程中,应谨慎操作,以免影响数据库的正常运行。在进行任何更改之前,最好先备份重要...

    将MySQL从MyISAM转换成InnoDB错误和解决办法

    ### 将MySQL从MyISAM转换成InnoDB的错误与解决方法 #### 一、问题背景及概述 本文主要探讨了在将MySQL数据库从MyISAM引擎转换为InnoDB引擎时遇到的问题及其解决方法。作者最初使用的是一款仅支持MyISAM引擎的非...

    修改MySQL的数据库引擎为INNODB的方法

    对于MySQL数据库,如果你要使用事务以及行级锁就必须使用INNODB引擎。如果你要使用全文索引,那必须使用myisam。 INNODB的实用性,安全性,稳定性更高但是效率比MYISAM稍差,但是有的功能是MYISAM没有的。修改MySQL...

    MySQL创建数据表时设定引擎MyISAM/InnoDB操作

    在本篇文章中,我们将重点关注如何在MySQL中为数据表设置存储引擎MyISAM和InnoDB的操作方法,并分析它们之间的区别。 首先,MySQL中的存储引擎可以理解为表的后端存储和检索机制,它们决定了如何存储表中的数据以及...

    43.要不要使用分区表?1

    1. **InnoDB分区表的间隙锁行为**:在InnoDB引擎中,由于分区表被视为多个独立的表,间隙锁的处理也会有所不同。例如,如果在一个分区上加了间隙锁,不会影响其他分区的数据,因此在不同分区上的插入操作可能不会...

    关于Mysql数据库还原修改存储引擎为INNODB引起的错误问题分析.docx

    MySQL 数据库是一个广泛使用的开源关系型数据库管理系统,其支持多种存储引擎,如 InnoDB 和 MyISAM。InnoDB 是一种事务安全的存储引擎,提供行级锁定和外键支持,适用于需要高度数据完整性和并发性的应用。MyISAM ...

Global site tag (gtag.js) - Google Analytics