Innodb与Myisam引擎的区别与应用场景

2024-11-22 杜世伟 Message

InnoDB 和 MyISAM 是 MySQL 数据库中常用的两种存储引擎,它们的设计目标、功能特性和适用场景有显著差异。以下是它们的区别和应用场景:

主要区别

1. 事务支持

  • InnoDB: 支持事务 (Transaction),提供 ACID 特性,可以通过 COMMIT 和 ROLLBACK 确保数据的一致性。
  • MyISAM: 不支持事务,适合不需要事务管理的场景。

2. 锁机制

  • InnoDB: 使用行级锁(Row-Level Locking),并发性能更高,适合高频读写操作的应用。
  • MyISAM: 使用表级锁(Table-Level Locking),在写操作时会锁定整个表,导致并发性能较差。

3. 外键支持

  • InnoDB: 支持外键约束,能维护数据的参照完整性。
  • MyISAM: 不支持外键约束,依赖应用层逻辑实现。

阅读全文>>

标签: mysql InnoDB myisam

评论(0) 浏览(688)

MySQL 给数据表增加一列,一定会锁表吗?

2024-11-21 杜世伟 Mysql

在 MySQL 中,给数据表增加一列(ALTER TABLE 操作)是否会锁表,取决于以下几个因素:

1. 存储引擎
InnoDB:这是 MySQL 默认的事务性存储引擎,从 MySQL 5.6 开始,InnoDB 支持在线 DDL(Online DDL),在某些情况下可以避免完全锁表。

MyISAM:这种存储引擎不支持在线 DDL,因此会对表进行完全锁定。


2. ALTER TABLE 的具体操作
不同的操作对锁表的影响不同:
新增列:简单的增加一个不带默认值或允许 NULL 的列,InnoDB 通常支持在线 DDL,可以避免锁表。
新增列并带有默认值:如果需要对现有数据进行填充(例如新增列设置了非空约束且有默认值),可能会触发对表中每一行的更新,此时通常会锁表。

新增列并影响索引:如果新增的列涉及索引或主键,也可能导致表锁。

阅读全文>>

标签: mysql InnoDB lock ddl

评论(0) 浏览(1025)

ERROR 1286 (42000): Unknown table engine 'InnoDB'

2016-6-14 杜世伟 Mysql


今天在操作数据的的时候,突然提示以下错误:
ERROR 1286 (42000): Unknown table engine 'InnoDB'
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.1.57    |
+-----------+
1 row in set (0.01 sec)
mysql> show engines;
+------------+---------+-----------------------------------------------------------+--------------+------+------------+
| Engine     | Support | Comment                                                   | Transactions | XA   | Savepoints |
+------------+---------+-----------------------------------------------------------+--------------+------+------------+
| CSV        | YES     | CSV storage engine                                        | NO           | NO   | NO         |
| MRG_MYISAM | YES     | Collection of identical MyISAM tables                     | NO           | NO   | NO         |
| MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables | NO           | NO   | NO         |
| MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance    | NO           | NO   | NO         |
+------------+---------+-----------------------------------------------------------+--------------+------+------------+
4 rows in set (0.00 sec) mysql> show variables like 'have_innodb%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | have_innodb | NO | +---------------+-------+ 1 row in set (0.00 sec) 至此发现数据库不支持INNOD引擎!!! mysql> show variables like '%dir%';

阅读全文>>

标签: mysql show enginx InnoDB

评论(0) 浏览(7450)

Powered by emlog 沪ICP备2023034538号-1