找回密码
 注册
查看: 5114|回复: 2

mysql的几种数据类型

[复制链接]
发表于 2012-6-23 17:23:01 | 显示全部楼层 |阅读模式
MySQL作为当前最为流行的免费数据库服务引擎,已经风靡了很长一段时间,不过也许也有人对于MySQL的内部环境不很了解,尤其那些针对并发性处理的机制。今天,我们先了解一下Mysql表类型,以及它们的一些简单性质。

截至目前,MySQL一共向用户提供了包括DBD、HEAP、ISAM、MERGE、MyIAS、InnoDB以及Gemeni这7种Mysql表类型。其中DBD、InnoDB属于事务安全类表,而其他属于事务非安全类表。

DBD
Berkeley DB(DBD)表是支持事务处理的表,由Sleepycat软件公司开发。它提供MySQL用户期待已久的功能--事务控制。事务控制在任何数据库系统中都是一个极有价值的功能,因为它们确保一组命令能成功地执行或回滚。

HEAP
HEAP表是MySQL中存取数据最快的表。这是因为他们使用存储在动态内存中的一个散列索引,不过如果MySQL或服务器崩溃,这些内存数据将会丢失。

ISAM
ISAM表是早期MySQL版本的缺省表类型,直到MyIASM开发出来。建议不要再使用它。

MERGE
MERGE是一个有趣的新类型,在3.23.25之后出现。一个MERGE表实际上是又一个MyISAM表的集合,合并而成的一个表,主要是为了效率的考虑,因为这样不仅仅可以提高速度、搜索效率、修复效率而且还节省了磁盘空间。

MyIASM
MyIASM基于了IASM代码,应该可以说是IASM的衍生品,不过增加了不少有用的扩展。它是MySQL的默认数据表类型,基于了传统的ISAM类型,ISAM是Indexed Sequential Access Method(有索引的顺序访问方法)的缩写,一般来说,它是存储记录和文件的标准方法。与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具。ISAM表格可以被压缩,而且它们支持全文搜索,不过它们是事务不安全的,而且也不支持外键。如果事务回滚将会造成不完全回滚,从而不具备原子性。所以假如忽略事务以及访问并发性的话,并且需要执行大量的SELECT检索语句的话,MyISAM将是最好的选择。

InnoDB
InnoDB是MySQL 4.0之后推出的一种比较新的数据表类型,这种类型是事务安全的。它与BDB类型具有相同的特性,它们还支持外键。InnoDB表格速度很快具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它。如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,同样应该使用InnoDB表。对于支持事务的InnoDB类型的表来说,影响速度的主要原因是AUTOCOMMIT默认设置是打开的,而且程序没有显式调用BEGIN 开始事务,导致每插入一条都自动提交,严重影响了速度。可以在执行sql前调用begin,多条sql形成一个事物(即使autocommit打开也可以),将大大提高性能。

Gemeni
Gemeni表,据听说也是在MySQL 4.0之后推出的,不过截至当前,很少有针对它的介绍,同样应用也就更少了,我们暂时不作介绍。

MySQL的数据表类型很多,其中比较重要的是MyISAM,InnoDB这两种。
这两种类型各有优缺点,需要根据实际情况选择适合的,MySQL支持对不同的表设置不同的类型。



MySQL 5.0支持的存储引擎包括 MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。

默认情况下,创建新表不指定表的存储引擎,则新表是默认存储引擎的,如果需要修改默认的存储引擎,需要在配置文件my.cnf中设置default-table-type的值。如果想查看当前数据库MySQL默认的存储引擎,可以使用mysql> show variables like 'table_type'; 来查看。要查询数据库支持哪些存储引擎,有两种方法:show engines; 或者show variables like 'have%';

我们最常用的两种存储引擎是MyISAM和InnoDB,下面对其进行详细介绍。

功能

特性

MyISAM

MyISAM是MySQL的默认存储引擎。是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具。 MyISAM表格可以被压缩,而且它们支持全文搜索.不支持事务和外键,优势是访问速度快,如果对事务完整性没有要求或者以select和insert语句为主,建议采用。

InnoDB

InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。相对与MyISAM,写的处理效率差并且会占用较多磁盘空间来保留数据和索引。
InnoDB 提供了行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs)。这些特性均提高了多用户并发操作的性能表现。在InnoDB表中不需要扩大锁定(lock escalation),因为 InnoDB 的列锁定(row level locks)适宜非常小的空间。InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。

存储

方式

MyISAM

MyISAM存储的方式是库中的表在磁盘上存储为3个文件,文件名与表名相同,扩展名为.MYD(MYData存储数据) .MYI(MYIndex存储索引)和.frm(存储表定义)。存储用户权限信息的MySQL库必须为MyISAM类型。
MyISAM的存储方式在my.cnf中配置为:
default-table-type = myisam

InnoDB

InnoDB的存储方式在my.cnf中配置,同时需要指定数据库存放的路径,空间需要根据实际情况预先分配。
default-table-type = innodb
innodb_data_home_dir = /data/dbdata/
innodb_data_file_path = ibdata1:10000M:autoextend
innodb_log_group_home_dir = /data/dbdata/
innodb_log_arch_dir = /data/dbdata/

数据

转移

MyISAM

MyISAM 中,表被存放在单独的文件中。跨平台的数据转移相对简单,所以在效率上要优于InnoDB,小型应用使用MyISAM是不错的选择。

InnoDB

InnoDB 的设计目标是处理大容量数据库系统,它的 CPU 利用率是其它基于磁盘的关系数据库引擎所不能比的。在技术上,InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。 InnoDB 把数据和索引存放在表空间里,可能包含多个文件,这与其它的不一样,
InnoDB所有的表都保存在同一个数据文件 ibdata1 中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump。InnoDB 表的大小只受限于操作系统的文件大小,一般为 2 GB。
回复

使用道具 举报

发表于 2013-3-9 12:24:20 | 显示全部楼层
呵呵,好资料
回复 支持 反对

使用道具 举报

发表于 2016-1-3 16:36:20 | 显示全部楼层
这个应该叫引擎类型吧,好像是用SHOW ENGINES 查看
修改默认引擎是在my.ini,在[mysqld]下加上
    default-storage-engine=XXXXX
其中xxxx部分是要指定的引擎名称,如 default-storage-engine=INNODB 。
用sql语句修改已经建成表的引擎:
ALTER TABLE tableName TYPE=XXXX
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-21 18:22 , Processed in 0.054031 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表