java事务的作用,java事务怎么写

  java事务的作用,java事务怎么写

  事务是访问数据库的操作序列,数据库应用系统通过事务集访问数据库。事务的正确执行使数据库从一种状态变为另一种状态。

  如何解决写爬虫IP受阻的问题?立即使用。

  一、事务必须服从ISO/IEC所制定的ACID原则。

  酸是原子性、一致性、隔离性和持久性的缩写。交易必须遵守ISO/IEC制定的ACID原则。酸是原子性、一致性、隔离性和持久性的缩写。

  原子性。不可分。事务要么全部执行,要么不执行。如果事务的所有子事务都提交成功,则所有数据库操作都提交,数据库状态发生变化;如果一个子事务失败,其他子事务的数据库操作将回滚,即数据库将返回到事务执行前的状态,不会发生状态转换。

   一致性或可串性。事务的执行使数据库从一种正确状态变为另一种正确状态。

  隔离性。在事务正确提交之前,不允许向任何其他事务提供对本事务数据的任何更改,即在事务正确提交之前,其可能的结果不应显示给任何其他事务。

  持久性。正确提交交易后,其结果将永久保存在数据库中。即使提交交易后还有其他失败,也会保存交易的处理结果。

  运行一个嵌入式SQL应用程序或脚本,在第一次执行可执行SQL语句时(建立与数据库的连接后或现有事务终止后),事务会自动启动。启动事务后,它必须由启动该事务的用户或应用程序显式终止,除非使用一个称为自动提交的进程(在这种情况下,发出的每个单独的SQL语句都被视为一个事务,并且在执行后立即隐式提交)。

  在大多数情况下,事务通过执行COMMIT或ROLLBACK语句来终止。当执行COMMIT语句时,自事务启动以来对数据库所做的所有更改都变成永久的,也就是说,它们被写入磁盘。当执行ROLLBACK语句时,自事务启动以来对数据库所做的所有更改都将被撤消,数据库将返回到事务启动前的状态。在这两种情况下,当事务完成时,保证数据库返回到一致的状态。

  值得注意的是,虽然事务通过确保只有在事务成功提交后对数据的更改才成为永久的来提供一般的数据库一致性,但是用户或应用程序需要确保在每个事务中执行的SQL操作序列总是导致一致的数据库。

  二、数据库系统支持两种事务模式:

  自动提交模式:每个SQL语句都是一个独立的事务。当数据库系统执行SQL语句时,它将自动提交事务。手动提交模式:数据库客户机必须显示指定的事务开始边界和结束边界。

  注:MySQL中有三种类型的数据库表:INNODB、BDB和MyISAM,其中MyISAM不支持数据库事务。MySQL中的create table语句默认为MyISAM类型。

  三、对于同时运行的多个事务,

  当这些事务访问数据库中相同的数据时,如果不采取必要的隔离机制,就会导致各种并发问题,可以归纳为以下几类:

  第一种丢失更新:当一个事务被取消时,其他事务提交的更新数据被覆盖。

  脏读:一个事务读取另一个事务提交的更新数据。

  虚拟读取:一个事务读取另一个事务提交的新插入的数据。不可重复读取:一个事务读取另一个事务提交的更新数据。第二种丢失的更新:

  这是不可重复读取的一个特例,其中一个事务覆盖了另一个事务提交的更新数据。

  四、隔离级别

  当数据库系统采用read Commited隔离级别时,会导致第二类丢失更新的并发问题,在应用中采用悲观锁或乐观锁可以避免这一问题。从应用的角度来看,锁可以分为以下几类:

  Serializable:事务在执行期间看不到其他事务对数据库的更新。可重复读取:在一个事务的执行过程中,可以看到其他事务提交的新插入的记录,但是看不到其他事务对已有记录的更新。Read Commited:在事务执行期间,您可以看到其他事务提交的新插入的记录,也可以看到其他事务提交的现有记录的更新。未提交读取:在一个事务执行过程中,可以对其他事务未提交的新插入记录进行拷问,可以看到其他事务未提交的已有记录的更新。

  隔离级别越高,数据完整性和一致性越好,但对并发性能的影响也越大。对于大多数应用,可以将数据库系统的隔离级别设置为Read Commited,这样可以避免脏读,具有良好的并发性能。虽然它会导致不可重复读取、伪读取和第二类缺失更新的并发问题,但在个别可能出现这种问题的场合,可以由应用程序使用悲观锁或乐观锁来控制。

  当数据库系统采用read Commited隔离级别时,会导致第二类丢失更新的并发问题,在应用中采用悲观锁或乐观锁可以避免这一问题。从应用的角度来看,锁可以分为以下几类:

  A.悲观锁:指锁定应用程序中显示的数据资源。虽然可以防止更新丢失、不可重复读取等并发问题,但是会影响并发性能,所以要谨慎使用。

  B.乐观锁:乐观锁假设当前事务操作数据资源时,不会有其他事务同时访问该数据资源,因此完全依赖数据库的隔离级别来自动管理锁。应用程序使用版本控制来避免可能的并发问题。

  五、悲观锁有两种实现方式。

  A.在应用程序中显示数据库系统锁定数据资源的指定独占位置。SQL语句:选择.更新使用Hibernate中的get,比如加载时的session.get (account.class,new load (1),lockmode,upgrade)。

  B.向数据库表中添加一个锁字段,以指示记录的状态。当其值为“Y”时,表示该记录已被事务锁定。如果为“N”,则表示记录处于空闲状态,事务可以访问它。这可以通过添加锁定标志字段来实现。

  利用Hibernate版本控制实现乐观锁定

  乐观锁是程序提供的一种机制,既能保证多个事务并发访问数据,又能防止第二种更新丢失问题。

  在应用中,可以使用Hibernate提供的版本控制功能来查看乐观锁定。OR映射文件中的版本元素和时间戳具有版本控制的功能。一般推荐使用上面的版本,这是java事务的细节。更多信息请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: