什么是事务

一件事就可以事务,事务就是操作过程合集统称

事务的特性

原子性:一段事务中,要么全部完成,要么都不完成
隔离性:两个客户同时操作同样的事务的解决方案,应用及其广泛,所以针对以上情况出现了事务的隔离级别:读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
一致性:在事务开始之前或者结束之后,数据库内的数据是完整的符合预设规则
持久性:一旦提交数据库,数据就会永久保存到数据(除非你进行了非法操作)

事务步骤

  1. 开启事务
    start transaction;SQLServer使用:begin transaction;
  2. 提交事务
    commit;
  3. 回滚事务
    rollback;

开启事务后直接写增删改业务即可

事务的隔离级别

  1. 脏读
    所有事务都可以看到其他未提交事务的执行结果,该级别引发的问题是——脏读(Dirty Read):读取到了未提交的数据 例:用户A向用户B转账100元,但是不将该操作提交,读未提交的情况下,B查看账户时发现钱确实已到账,但用户A转账这个操作只要不提交,事务就会被回滚,之后B再查看账户时会发现钱没到账,这也就是出现了脏读。
  2. 幻读
    幻读的重点在于新增或者删除,同样的条件, 第1次和第2次读出来的记录数不一样
  3. 重复读
    系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样
  4. 串行化
    事务 A 和事务 B,事务 A 在操作数据库时,事务 B 只能排队等待。这种级别可以避免“幻读”,每一次读取的都是数据库中真实存在数据,事务 A 与事务 B 串行,而不并发。

隔离级别

脏读

不可重复读

幻读

读未提交




读已提交




可重复读




串行化




  1. 乐观锁
    有a、b俩事务,当a事务在查询数据的时候,对b没影响,而且当a事务在更改数据提交的时候虽然会验证数据完整性,但这时b事务中数据发生改变也不会影响到a事务中对该数据的更改。
  2. 悲观锁
    看字面意思悲观,则他就很悲观,即当某一事务操作数据的时候,他就会提前上锁。只有当它操作完该数据的时候释放锁,别的事务才可以进行操作该数据。