MySQL快速入门07----存储引擎

本文介绍了MySQL中的存储引擎概念及其选择标准,并对比了InnoDB和MyISAM两种常见存储引擎的区别,包括它们的数据存储方式、索引特性、锁机制及事务支持等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


存储引擎:也叫表类型,指的是数据表的存储机制,索引方案等配套相关功能。不同的引擎,由于处理方式不同,会带来不同的功能或者相应优化,根据实际需求选择合理的引擎。

选择表的存储引擎的标准

  • 是否需要事务支持;
  • 是否支持外键;
  • 并发量的要求;
  • 错误恢复的处理;
  • 是否支持某些具体功能;

配置方案:


通过my.ini,可以配置:
default-storage-engine=INNODB

在创建表,或者编辑表时,可以指定表的存储引擎。

更改表引擎:
mysql> alter table pk_1 engine myisam;
Query OK, 2 rows affected (0.13 sec)
Records: 2  Duplicates: 0  Warnings: 0

对于既有外键的表无法更改其引擎,只能用InnoDB引擎:
mysql> alter table lin_student engine myisam;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails


创建表时指定表引擎:
mysql> create table room(
    -> id int primary key auto_increment,
    -> sz varchar(20)
    -> )engine myisam character set utf8;
Query OK, 0 rows affected (0.05 sec)


InnoDB和myisam


区别:

(1)保存文件的方式不同:
myisam,一个表,三个文件:
tbl_name.frm 结构;
tbl_name.myd 数据;
tbl_name_myi 索引。


InnoDB一个表一个文件
一个结构文件tbl_name.frm
所有的innodb表,都使用相同的innodb存储表空间来保存数据和索引。

(2)
数据和索引的保存的文件不同:MyISAM是分开保存,而innodb是保存到表空间
MyIASM支持索引压缩,而Innodb索引和数据是绑定保存不压缩,体积大。
Innodb很多时候是行级锁,而myisam是表级锁,innodb的并发高。
InnoDB不支持FULLTEXT类型的索引(新版本的InnoDB也支持)。
Innodb支持事务,外键,数据完整性约束要强。而MYISAM不支持。

InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。


通过show engines来查看MySQL的存储引擎:
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |

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

| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |

| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |

| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |

| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |

| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |

| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |

| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |

| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |

| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值