表使用 MyISAM 引擎,不支援事務,
COMMIT/ROLLBACK無效果,隱性自動提交。
| 特性 | InnoDB | MyISAM |
|---|---|---|
| 事務支援 | ✅ ACID | ❌ |
| 外鍵 | ✅ | ❌ |
| 鎖粒度 | 行鎖 | 表鎖 |
| 全文索引 | 5.6+ ✅ | ✅ |
| COUNT(*) | 掃描表 | 直接讀取計數器 |
| AUTO_INCREMENT | 需單獨索引 | 可聯合索引 |
| DELETE 表 | 逐行刪除 | 重建表 |
| 崩潰恢復 | Redo/Undo Log | 無 |
-- 查看引擎 SHOW CREATE TABLE tbl_name; SHOW TABLE STATUS LIKE 'tbl_name'; -- 修改引擎(會鎖表重建,大表慎用) ALTER TABLE tbl_name ENGINE = InnoDB;
SET AUTOCOMMIT = 0 或連線字串加 autocommit=false。CREATE/DROP/ALTER TABLE 會強制提交當前事務。[mysqld] innodb_buffer_pool_size = 1G # 實體記憶體 60-80% innodb_flush_log_at_trx_commit = 1 # 1=最安全,0/2=高效能但可能丟 1 秒資料 innodb_file_per_table = 1 # 獨立表空間,利於管理 innodb_log_file_size = 256M # 減少 checkpoint 頻率
SET AUTOCOMMIT = 0; START TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; -- 故意報錯或 ROLLBACK ROLLBACK; SELECT * FROM accounts WHERE id IN (1,2); -- 餘額應未變