MySQL事务处理详解:ACID特性和实战应用

需积分: 50 15 下载量 93 浏览量 更新于2024-09-08 收藏 11KB TXT 举报
本文档详细介绍了MySQL事务处理的深入用法和实际操作实例。事务在数据库管理中起着关键作用,其主要遵循ACID原则:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。在MySQL中,事务的开启和结束由COMMIT和ROLLBACK语句来控制。默认情况下,MySQL的AUTOCOMMIT模式设置为1,这意味着每个单独的SQL语句都会被视为一个潜在的事务,直到COMMIT确认。若希望在一系列操作中保持事务性,可以将AUTOCOMMIT设置为0,此时需要显式使用COMMIT。 在使用事务时,开发者通常会按照以下步骤进行操作: 1. **开始事务**:通过调用`BEGIN WORK`或等效的`START TRANSACTION`命令开始一个事务,这标志着一组操作的集合。 2. **执行SQL命令**:在事务内执行一系列SQL操作,如SELECT、INSERT、UPDATE或DELETE,这些操作应该是原子性的,即要么全部完成,要么都不执行。 3. **错误处理**:如果遇到错误,使用`ROLLBACK`将事务回滚到开始状态,以撤销所有未完成的操作。如果没有错误,继续执行。 4. **提交事务**:在所有预期操作成功后,使用`COMMIT`正式确认事务,将所有更改永久保存到数据库。 对于MySQL事务安全的表类型,InnoDB是最常见的选择,因为它支持事务处理。在构建应用时,如果数据库服务器不直接支持InnoDB,可能需要从源代码编译或安装特定版本的MySQL,或者在开发环境中使用支持InnoDB的MySQL发行版。使用`mysql_query()`函数可以在PHP中执行这些事务相关的SQL命令。 理解并熟练运用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;