PHP事务处理与MySQL事务机制详解

需积分: 10 8 下载量 40 浏览量 更新于2024-10-23 收藏 33KB DOC 举报
"这篇文档介绍了PHP中如何进行MySQL事务处理,并阐述了事务处理在系统安全性中的重要性,特别是在像银行转账这样的关键业务场景下。文中提到了MySQL事务处理的两种主要方法,一种是通过`begin`, `rollback`, `commit`语句来控制,另一种是通过设置`autocommit`来开关自动提交功能。同时强调了只有INNODB和BDB类型的表才支持事务处理。文档还提供了一个简单的MySQL事务处理示例,包括创建表、开始事务、插入数据和提交事务的过程。" 在数据库管理中,事务处理是确保数据一致性与完整性的核心机制。当一个操作序列需要作为一个整体执行,即所有操作要么全部成功,要么全部失败,这时就需要使用事务。事务处理的意义在于防止因单个操作的失败导致整个业务流程的混乱,从而降低风险。 在PHP中,与MySQL交互进行事务处理有两种方式。首先,可以显式地使用`begin`启动一个事务,接着执行一系列SQL操作。如果在这些操作中发生错误,可以通过`rollback`回滚事务,撤销所有更改;如果一切顺利,使用`commit`来提交事务,使得更改永久保存。 第二种方法涉及改变MySQL的自动提交模式。默认情况下,MySQL处于自动提交状态,每次执行一个SQL查询就会立即提交。通过`set autocommit = 0`,可以关闭自动提交,此时,所有后续的SQL命令将被视为一个事务的一部分,直到使用`commit`确认或`rollback`取消。然而,关闭自动提交后,需要注意的是,结束一个事务的同时会开启新的事务,除非手动开启或关闭自动提交,否则将持续处于事务处理模式。 MySQL的事务支持不是所有存储引擎都提供的特性。只有INNODB和BDB引擎支持事务,其中INNODB是MySQL中最常用的事务型存储引擎,它提供了ACID(原子性、一致性、隔离性和持久性)事务特性,适合处理高并发和数据一致性的场景。 在提供的示例中,创建了一个名为`dbtest`的INNODB类型表,然后开启事务,依次插入两条数据,最后提交事务。这个例子展示了事务处理的基本流程,确保了即使在插入过程中出现问题,之前的操作也不会影响到数据库的原始状态。 理解并正确使用PHP中的MySQL事务处理对于构建可靠且安全的数据库应用程序至关重要,尤其是在处理关键业务逻辑时。
2013-06-13 上传
关于mysql的事务处理 public static void StartTransaction(Connection con, String[] sqls) throws Exception { if (sqls == null) { return; } Statement sm = null; try { // 事务开始 System.out.println("事务处理开始!"); con.setAutoCommit(false); // 设置连接不自动提交,即用该连接进行的操作都不更新到数据库 sm = con.createStatement(); // 创建Statement对象 //依次执行传入的SQL语句 for (int i = 0; i < sqls.length; i++) { sm.execute(sqls[i]);// 执行添加事物的语句 } System.out.println("提交事务处理!"); con.commit(); // 提交给数据库处理 System.out.println("事务处理结束!"); // 事务结束 //捕获执行SQL语句组中的异常 } catch (SQLException e) { try { System.out.println("事务执行失败,进行回滚!\n"); con.rollback(); // 若前面某条语句出现异常时,进行回滚,取消前面执行的所有操作 } catch (SQLException e1) { e1.printStackTrace(); } } finally { sm.close(); } } 通常都是上述的写法, 在mysql 不支持事务的时候 , 中间的 setAutoCommit 的事务操作是不是都不生效. 现在innoDB支持 事务了, 上述的 java 代码是否能实现 以下的 事务隔离的 操作, 在修改的时候处于锁定状态 或者 只可以通过存储过程来实现, 单行的锁定 BEGIN; SELECT book_number FROM book WHERE book_id = 123 FOR UPDATE; --这里for update , 以前用Oracle的时候也是有这个行锁 // ... UPDATE book SET book_number = book_number - 1 WHERE book_id = 123; COMMIT;