MySQL中的InnoDB是默认的事务型存储引擎,它提供了崩溃恢复、行级锁定、外键约束等能力,适合大多数需要可靠数据处理的业务场景。理解InnoDB有助于我们写出更安全高效的数据库代码。

什么是InnoDB存储引擎
InnoDB是MySQL内置的一种存储引擎,数据以聚簇索引的方式组织,支持ACID事务。与早期的MyISAM不同,InnoDB在写入时不会锁全表,而是尽量只锁涉及的行,从而提升并发能力。
核心特性说明
- 事务支持:通过commit和rollback保证操作原子性
- 行级锁:减少并发写入的阻塞
- 外键约束:维护表间数据完整性
- 崩溃恢复:通过redo日志自动修复未落盘的数据
代码示例:创建InnoDB表并使用事务
下面代码演示如何显式指定InnoDB引擎,并执行一个简单的事务。
-- 创建使用InnoDB引擎的账户表 CREATE TABLE account ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, balance DECIMAL(10,2) NOT NULL, FOREIGN KEY (id) REFERENCES user(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 开启事务 START TRANSACTION; -- 从A账户扣款 UPDATE account SET balance = balance - 100 WHERE name = 'A'; -- 向B账户加款 UPDATE account SET balance = balance + 100 WHERE name = 'B'; -- 确认无误后提交 COMMIT; -- 若出错可回滚 -- ROLLBACK;
如何通过代码观察锁行为
我们可以在两个会话中模拟并发更新同一行,观察InnoDB的行锁效果。
-- 会话1 START TRANSACTION; UPDATE account SET balance = balance - 10 WHERE id = 1; -- 会话2(在会话1提交前执行,会被行锁阻塞) START TRANSACTION; UPDATE account SET balance = balance - 10 WHERE id = 1;
小结
InnoDB凭借事务、行锁和外键成为MySQL最通用的存储引擎。在开发中,我们应习惯使用事务包裹关键写入,并合理设计索引以减少锁冲突。