Innodb与Myisam引擎的区别与应用场景
InnoDB 和 MyISAM 是 MySQL 数据库中常用的两种存储引擎,它们的设计目标、功能特性和适用场景有显著差异。以下是它们的区别和应用场景:
主要区别
1. 事务支持
-
InnoDB: 支持事务 (Transaction),提供 ACID 特性,可以通过
COMMIT
和ROLLBACK
确保数据的一致性。 - MyISAM: 不支持事务,适合不需要事务管理的场景。
2. 锁机制
- InnoDB: 使用行级锁(Row-Level Locking),并发性能更高,适合高频读写操作的应用。
- MyISAM: 使用表级锁(Table-Level Locking),在写操作时会锁定整个表,导致并发性能较差。
3. 外键支持
- InnoDB: 支持外键约束,能维护数据的参照完整性。
- MyISAM: 不支持外键约束,依赖应用层逻辑实现。
MySQL 给数据表增加一列,一定会锁表吗?
在 MySQL 中,给数据表增加一列(ALTER TABLE 操作)是否会锁表,取决于以下几个因素:1. 存储引擎
InnoDB:这是 MySQL 默认的事务性存储引擎,从 MySQL 5.6 开始,InnoDB 支持在线 DDL(Online DDL),在某些情况下可以避免完全锁表。
MyISAM:这种存储引擎不支持在线 DDL,因此会对表进行完全锁定。
不同的操作对锁表的影响不同:
新增列:简单的增加一个不带默认值或允许 NULL 的列,InnoDB 通常支持在线 DDL,可以避免锁表。
新增列并带有默认值:如果需要对现有数据进行填充(例如新增列设置了非空约束且有默认值),可能会触发对表中每一行的更新,此时通常会锁表。
新增列并影响索引:如果新增的列涉及索引或主键,也可能导致表锁。
ERROR 1286 (42000): Unknown table engine 'InnoDB'
今天在操作数据的的时候,突然提示以下错误: 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%';
热门日志
分类
- Django(4)
- ssdb(1)
- Mac(7)
- C(1)
- memcache(1)
- Python(32)
- Vim(8)
- sed(2)
- ansible(3)
- awk(4)
- shell(3)
- about(1)
- git(9)
- bat(4)
- svn(0)
- docker(1)
- Tornado(1)
- go(2)
- 架构(18)
- Vue(1)
- game(2)
- Html(6)
- Java(8)
- Mysql(37)
- Ajax(2)
- Jsp(1)
- Struts(8)
- Linux(72)
- JavaScript(39)
- Staruml(0)
- Mouth(1)
- Php(102)
- Windows(8)
- Message(48)
- Lua(10)
- Compute(1)
- Redis(7)
- Nginx(12)
- Jquery(1)
- Apache(1)
- cocos2d-x(8)