JAVA----数据库事务

  • 事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态

  • 事务处理(事务操作):保证所有事务都作为一个工作单元来执行,即使出现了故障,也不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交,那么这些修改就永久地保存下来;要么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初状态。

  • 数据一旦提交,就不可回滚

  • 数据什么时候意味着提交?

    • 当一个连接对象被创建时,默认情况下是自动提交事务;每次执行一个SQL语句时,如果执行成功,就会向数据库自动提交。
    • 关闭数据库连接,数据就会自动的提交。如果有多个操作,且每个操作使用的是自己单独的连接,则无法保证事务。即同一个事务的多个操作必须在同一个连接下。
  • 如何在JDBC程序中让多个SQL语句作为一个事务执行:

    • 调用Connection对象的setAutoCommit(false);以取消自动提交事务
    • 在所有的SQL语句都成功执行后,调用commit();方法提交事务
    • 在出现异常时,调用rollback();方法回滚事务
    • 若此时Connection没有被关闭,还可能被重复使用,则需要恢复其自动提交状态setAutoCommit(true)。
  • 对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题。

    • 脏读:对于两个事务T1,T2。T1读取了已经被T2更新但还没有被提交的字段。之后,若T2回滚,T1读取的内容就是临时且无效的。
    • 不可重复读:对于两个事务T1,T2 。T1读取了一个字段,然后T2更新了该字段。之后,T1再次读取同一个字段,值就不同了。
    • 幻读:对于两个事务T1,T2 。T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行。之后,如果T1再次读取同一个表,就会多出几行。
  • 四种事务隔离级别

posted @ 2022-04-20 17:32  ice--cream  阅读(320)  评论(0编辑  收藏  举报