当前位置:嗨网首页>书籍在线阅读

03-各种存储引擎的特性

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

Transactions: NO

插件式存储引擎是MySQL数据库最重要的特性之一,用户可以根据应用的需要选择如何存储和索引数据、是否使用事务等。MySQL默认支持多种存储引擎,以适用于不同领域的数据库应用需要,用户可以通过选择使用不同的存储引擎提高应用的效率,提供灵活的存储,用户甚至可以按照自己的需要定制和使用自己的存储引擎,以实现最大程度的可定制性。

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

创建新表时如果不指定存储引擎,那么系统就会使用默认存储引擎,MySQL 5.5之前的默认存储引擎是MyISAM,5.5之后改为了InnoDB。如果要修改默认的存储引擎,可以在参数文件中设置default-table-type。查看当前的默认存储引擎,可以使用以下命令:

mysql> show variables like 'table_type';

+---------------+--------+

| Variable_name | Value |

+---------------+--------+

| table_type | MyISAM |

+---------------+--------+

1 row in set (0.00 sec)

可以通过下面两种方法查询当前数据库支持的存储引擎,第一种方法为:

mysql> SHOW ENGINES \G

1. row

Engine: MyISAM

Support: DEFAULT

Comment: Default engine as of MySQL 3.23 with great performance

Transactions: NO

XA: NO

Savepoints: NO

2. row

Engine: MEMORY

Support: YES

Comment: Hash based, stored in memory, useful for temporary tables

XA: NO

Savepoints: NO

3. row

Engine: MRG_MYISAM

Support: YES

Comment: Collection of identical MyISAM tables

Transactions: NO

XA: NO

Savepoints: NO

4. row

Engine: InnoDB

Support: YES

Comment: Supports transactions, row-level locking, and foreign keys

Transactions: YES

XA: YES

Savepoints: YES

5. row

Engine: CSV

Support: YES

Comment: CSV storage engine

Transactions: NO

XA: NO

Savepoints: NO

5 rows in set (0.00 sec)

第二种方法为:

mysql> SHOW VARIABLES LIKE 'have%';

+----------------------------+-------+

| Variable_name | Value |

+----------------------------+-------+

| have_archive | NO |

| have_bdb | NO |

| have_blackhole_engine | NO |

| have_compress | YES |

| have_crypt | YES |

| have_csv | YES |

| have_dlopen | YES |

| have_example_engine | NO |

| have_federated_engine | NO |

| have_geometry | YES |

| have_innodb | YES |

| have_ndbcluster | NO |

| have_openssl| NO|

| have_partitioning| YES |

| have_query_cache| YES |

| have_row_based_replication | YES |

| have_rtree_keys| YES |

| have_symlink| YES |

+----------------------------+-------+

18 rows in set (0.00 sec)

以上两种方法都可以查看当前支持哪些存储引擎,其中Value显示为“DISABLED”的记录表示支持该存储引擎,但是数据库启动的时候被禁用。

在创建新表的时候,可以通过增加ENGINE关键字设置新建表的存储引擎,例如,在下面的例子中,表ai的存储引擎是MyISAM,而country表的存储引擎是InnoDB:

CREATE TABLE ai (

i bigint(20) NOT NULL AUTO_INCREMENT,

PRIMARY KEY (i)

) ENGINE=MyISAM DEFAULT CHARSET=gbk;

CREATE TABLE country (

country_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,

country VARCHAR(50) NOT NULL,

last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

PRIMARY KEY (country_id)

)ENGINE=InnoDB DEFAULT CHARSET=gbk;

也可以使用ALTER TABLE语句,将一个已经存在的表修改成其他的存储引擎。下面的例子介绍了如何将表ai从MyISAM存储引擎修改到InnoDB存储引擎:

mysql> alter table ai engine = innodb;

Query OK, 0 rows affected (0.13 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql> show create table ai \G

1. row

Table: ai

Create Table: CREATE TABLE 'ai' (

'i' bigint(20) NOT NULL AUTO_INCREMENT,

PRIMARY KEY ('i')

) ENGINE=InnoDB DEFAULT CHARSET=gbk

1 row in set (0.00 sec)

这样修改后,表ai的存储引擎是InnoDB,可以使用InnoDB存储引擎的相关特性。