MySQL 存储过程之事务管理 MySQL 存储过程之事务管理 ACID:Atomic、Consistent、Isolated、Durable 存储程序提供了一个绝佳的机制来定义、封装和管理事务。 1,MySQL 的事务支持 MySQL 的事务支持不是绑定在 MySQL 服务器本身,而是与存储引擎相关: Java 代码 MyISAM:不支持事务,用于只读程序提高性能 InnoDB:支持 ACID 事务、行级锁、并发 Berkeley DB:支持事务 隔离级别: 隔离级别决定了一个 session 中的事务可能对另一个 session 的影响、并发 session 对数据库的操作、一个 session 中所见数据的一致性 ANSI 标准定义了4个隔离级别,MySQL 的 InnoDB 都支持: Java 代码 READ UNCOMMITTED:最低级别的隔离,通常又称为 dirty read,它允许一个事务读取还没 commit 的数据,这样可能会提高性能,但是 dirty read 可能不是我们想要的 READ COMMITTED:在一个事务中只允许已经 commit 的记录可见,如果 session中 select 还在查询中,另一 session 此时 insert 一条记录,则新添加的数据不可见 REPEATABLE READ:在一个事务开始后,其他 session 对数据库的修改在本事务中不可见,直到本事务commit 或 rollback。在一个事务中重复 select 的结果一样,除非本事务中 update 数据库。 SERIALIZABLE:最高级别的隔离,只允许事务串行执行。为了达到此目的,数据库会锁住每行已经读取的记录,其他session 不能修改数据直到前一事务结束,事务commit 或取消时才释放锁。 可以使用如下语句设置 MySQL 的session 隔离级别: Java 代码 SET TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE} MySQL 默 认 的隔 离 级 别 是 REPEATABLE READ ,在 设 置 隔 离 级 别 为 READ UNCOMMITTED 或SERIALIZABLE 时要小心,READ UNCOMMITTED 会导致数据完整性的严重问题,而 SERIALIZABLE 会导致性能问题并增加死锁的机率 事务管理语句: Java 代码 START TRANSACTION:开始事务,autocommit 设为0,如果已经有一个事务在运行,则会触发一个隐藏的COMMIT COMMIT:提交事务,保存更改,释放锁 ROLLBACK:回滚本事务对数据库的所有更改,然后结束事务,释放锁 SAVEPOINT savepoint_name:创建一个 savepoint 识别...