黑马程序员技术交流社区

标题: 【广州校区】【原创】事务的四大特性以及隔离级别 [打印本页]

作者: 帅气de路人甲    时间: 2018-2-8 16:20
标题: 【广州校区】【原创】事务的四大特性以及隔离级别
[size=14.0000pt]1. 原子性
        原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚
例如:使用原生态的JDBC,开启了事务之后,插入一行数据到数据库,在插入数据的过程中模拟一个异常,int i = 10 / 0;那么这条数据就不应该被插入到数据库里面了。
[size=14.0000pt]2. 一致性
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
例如:在转账的前后,AB加起来一共有2000块钱,那么在转账结束之后,AB加起来的钱也是2000块,不会多,也不会少。
[size=14.0000pt]3. 隔离性
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
其实,这个比较好理解例如现在使用SQLYog去操作一个事务,然后再用命令行的方式去打开一个窗口,那么这两个窗口进行的事务是各自互不相关的。所以,事务要使用同一个connection去操控。
[size=14.0000pt]4. 持久性
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
.脏读
脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。
例如:现在有事务A和事务B,事务A多次修改一个数据,然后这个事务还没有被提交,这个时候,事务B也在读取事务A修改后的那个一个数据(也就是读取到了事务A没有提交的数据),造成两个事务得到的数据不一致。
特点:针对的是同一条数据。
.不可重复读
不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
例如:现在有事务A和事务B,事务B读取一个数据,然后,这个时候,事务A马上修改了这个数据并提交,这个时候,B再去读取数据的时候,发现两次的数据不同了。这个就是不可重复读。
特点:针对的也是同一条数据。区别于脏读,这里事务B读取的是已经提交的数据。
.幻读(虚读)
幻读是指多次读取同一个表获取到不同的数据。
例如:现在有事务A和事务B,事务B去修改一个表的数据,例如把一个表的字段sex全部设置为“男”,这时候,A去添加一条新的数据,sex设置为“女”,这个时候,事务B提交事务之后再去查询表,发现还有一条数据没有修改。
特点:针对的是多条数据。区别于脏读,这里的是已经提交事务的数据。
隔离级别:
   ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
  ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。
  ③ Read committed (读已提交):可避免脏读的发生。
  ④ Read uncommitted (读未提交):最低级别,任何情况都无法保证


作者: Yin灬Yan    时间: 2018-2-8 18:58
我来占层楼啊  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2