mysql里的事务

一、事务的介绍和特点

1、事务:一个数据库事务由一条或者多条sql语句构成,它们形成一个逻辑的工作单元。这些sql语句要么全部执行成功,要么全部执行失败,这就符体现了事务的原子性;
2、事务的特点:保证数据的完整性和一致性

二、事务的分类

1、DCL事务:(grant、revoke)不受自动提交的影响,和autocommit是否开启无关
2、DDL事务:(create、alter、drop)不受自动提交的影响,和autocommit是否开启无关
3、DML事务:(由一条或者多条DML语句组成)受自动提交的影响,和autocommit是否开启有关,如果关闭了,需要手动进行commit

三、事务的两个操作

1.commit --》提交:数据从内存写到磁盘里
2.rollback --》回滚:内存里修改的数据,不落盘,同时撤销原来的操作

四、事务的保存点

1、保存点:用来在事务中做一个标记,专门提供给rollback to 语句使用的
2、rollback to:回滚到保存点。专门用来撤销事务所作的部分工作,保存点之后所做的工作全部撤销。该语句并不结束事务
3、事务回滚示例:
在这里插入图片描述
4、事务的并发控制

采用的机制就是:锁

5、事务的四个特性

1、原子性
2、一致性
3、隔离性
4、持久性
五、并发、并行、串行

1、并发:在一个时间段内,不是同时发生的,只是在某个时间段里,是同时发生的。
2、并行:同一个时间点同时操作执行
3、串行:按照实践顺序去执行

六、并发事务的4个问题

1.脏读:一个事务读到了另一个事务未提交的数据
2.不可重复读:两次读到的数据值不一样,进行了update操作
3.幻读:两次读到的次数不一样,进行了insert、delete操作
4.丢失更新:是允许发生的

七、解决并发问题的4个隔离级别

1.读未提交
2.读已提交
3.可重复读 #mysql里面默认的
4.可串行化
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关于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;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值