mysql从头学一 1.0存储引擎概述

什么是存储引擎?
与其他数据库例如Oracle 和SQL Server等数据库中只有一种存储引擎不同的是,MySQL有一个被称为“Pluggable Storage Engine Architecture”(可替换存储引擎架构)的特性,也就意味着MySQL数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。MySQL数据库在实际的工作中其实分为了语句分析层和存储引擎层,其中语句分析层就主要负责与客户端完成连接并且事先分析出SQL语句的内容和功能,而存储引擎层则主要负责接收来自语句分析层的分析结果,完成相应的数据输入输出和文件操作。简而言之,就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。
 

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

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

默认情况下,创建新表不指定表的存储引擎,则新表是默认存储引擎的,如果需要修改默认的存储引擎,则可以在参数文件中设置 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

Transactions: NO           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 存储引擎的相关特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值