事务的四大特性ACID事务是MySQL保证数据一致性的核心机制具备四大特性1. 原子性Atomicity事务中的所有操作要么全部成功要么全部回滚2. 一致性Consistency事务前后数据库处于合法状态3. 隔离性Isolation并发事务相互隔离互不干扰4. 持久性Durability已提交的事务永久保存不会因系统故障丢失事务隔离级别MySQL支持四种事务隔离级别由低到高1. READ UNCOMMITTED读未提交可读取未提交数据存在脏读2. READ COMMITTED读已提交只读已提交数据存在不可重复读3. REPEATABLE READ可重复读MySQL默认级别同一事务多次读取结果一致4. SERIALIZABLE串行化最高隔离级别完全串行执行-- 设置隔离级别SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;InnoDB锁类型详解InnoDB支持多种锁类型行级锁- 共享锁S锁SELECT ... LOCK IN SHARE MODE- 排他锁X锁SELECT ... FOR UPDATE表级锁- 意向共享锁IS- 意向排他锁IX特殊锁- 记录锁Record Lock锁定单行记录- 间隙锁Gap Lock锁定记录间的间隙防止幻读- 临键锁Next-Key Lock记录锁间隙锁REPEATABLE READ下的默认锁死锁的检测与预防死锁是两个或多个事务互相等待对方释放锁的状态。预防死锁的策略1. 保持固定的加锁顺序如始终先锁用户表再锁订单表2. 缩短事务减少锁持有时间3. 避免大事务拆分为小事务4. 使用低隔离级别检测死锁SHOW ENGINE INNODB STATUS; -- 查看最近的死锁信息MySQL会自动检测死锁并回滚代价小的事务通过innodb_deadlock_detect参数控制。乐观锁与悲观锁的选择悲观锁认为并发冲突频繁每次操作都加锁-- 悲观锁示例BEGIN;SELECT balance FROM accounts WHERE id1 FOR UPDATE;UPDATE accounts SET balancebalance-100 WHERE id1;COMMIT;乐观锁认为冲突较少通过版本号控制-- 乐观锁示例version字段SELECT balance, version FROM accounts WHERE id1;UPDATE accounts SET balancebalance-100, versionversion1WHERE id1 AND version当前version;-- 检查影响行数为0则说明有冲突需重试选择建议读多写少用乐观锁写多或冲突频繁用悲观锁。MVCC多版本并发控制MVCC是InnoDB实现高并发的核心机制通过保存数据的历史版本让读操作不需要加锁。核心概念- 隐藏列每行数据有trx_id最近修改事务ID和roll_pointer回滚指针- undo log保存历史版本数据- ReadView事务开始时创建的快照决定可见哪些版本MVCC使得读写操作可以并发执行大幅提升了数据库吞吐量。最佳实践1. 保持事务尽量短小避免长事务2. 不要在事务中进行耗时的外部调用3. 合理设置锁等待超时SET innodb_lock_wait_timeout50;4. 监控锁等待SELECT * FROM information_schema.INNODB_LOCKS;5. 使用连接池时注意事务的正确提交与回滚