news 2026/5/15 22:10:11

ACID [Atomicity, Consistency, Isolation, Durability]

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ACID [Atomicity, Consistency, Isolation, Durability]
ACID [Atomicity, Consistency, Isolation, Durability] 原子性、一致性、隔离性、持久性

package further.zwf.acid; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; /** * MySQL 事务示例:银行转账(原子性、一致性保证) * * @author ZengWenFeng * @date 2022.12.07 * @mobile 13805029595 * @email 117791303@QQ.COM */ public class MysqlTransactionDemo { // 数据库配置(改成你自己的) private static final String URL = "jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC"; private static final String USER = "root"; private static final String PASSWORD = "123456"; public static void main(String[] args) { transfer(1001, 1002, 100.0); // 1001 给 1002 转 100 元 } /** * 转账方法(核心事务代码) * @param fromId 转出账户ID * @param toId 转入账户ID * @param money 转账金额 */ public static void transfer(int fromId, int toId, double money) { Connection conn = null; PreparedStatement deductStmt = null; PreparedStatement addStmt = null; try { // 1. 获取数据库连接 conn = DriverManager.getConnection(URL, USER, PASSWORD); // ========== 事务核心:关闭自动提交 ========== conn.setAutoCommit(false); // 2. 扣钱:转出账户 -money String deductSql = "UPDATE account SET balance = balance - ? WHERE id = ?"; deductStmt = conn.prepareStatement(deductSql); deductStmt.setDouble(1, money); deductStmt.setInt(2, fromId); deductStmt.executeUpdate(); // 模拟异常(打开测试回滚) // int error = 1 / 0; // 3. 加钱:转入账户 +money String addSql = "UPDATE account SET balance = balance + ? WHERE id = ?"; addStmt = conn.prepareStatement(addSql); addStmt.setDouble(1, money); addStmt.setInt(2, toId); addStmt.executeUpdate(); // ========== 全部成功:提交事务 ========== conn.commit(); System.out.println("转账成功!事务已提交"); } catch (Exception e) { // ========== 出现异常:回滚事务 ========== try { if (conn != null) { conn.rollback(); System.out.println("转账失败!事务已回滚"); } } catch (SQLException ex) { ex.printStackTrace(); } e.printStackTrace(); } finally { // 关闭资源 try { if (deductStmt != null) deductStmt.close(); if (addStmt != null) addStmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 22:08:30

SQL-update多条Select出来的数据

好多朋友喜欢用游标解决此问题,但是执行速度狂慢! 其实解决起来很简单了: 先来个简单的: 把FLowER的Am_employee表的email,dept_id,ext_no多条数据按emp_no对应update到EmpBaseInfo表中: update EmpBaseInfo set em…

作者头像 李华
网站建设 2026/5/15 22:06:05

2026届最火的AI论文网站推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能技术迅猛发展起来,它在学术领域的应用延伸到开题报告这个研究初始环节&…

作者头像 李华
网站建设 2026/5/15 22:02:08

【职场】聪明人,从不在公司交朋友

聪明人,从不在公司交朋友“你以为你们是朋友。但有一天你会发现,你们之间站着一个共同的雇主。”一、那个"最懂你"的同事 你们一起骂过同一个领导。 一起在茶水间吐槽过公司文化。 一起在深夜加班时互相打气。 你告诉他你想离职,告…

作者头像 李华
网站建设 2026/5/15 21:58:15

【模块化设计-10】UART1 驱动 + 环形 FIFO 实现高效串口数据收发

在嵌入式开发中,串口(UART)是最常用的通信接口之一,而直接采用中断 缓冲区的方式处理串口数据,能有效避免数据丢失、提升收发效率。本文将基于实际项目代码,详解UART1 驱动与环形 FIFO(ring_fi…

作者头像 李华