博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle - 数据更新 - 事务
阅读量:2384 次
发布时间:2019-05-10

本文共 5555 字,大约阅读时间需要 18 分钟。

/*    事务        事务是为了控制数据异步访问所使用的一种技术        就类似于java中的锁机制 synchronized,只不过功能更加强大        事务不能进行嵌套,当我们开启一个事务的之后作的每一次dml语句都属于这个事务                                在oracle里面            事务的开启                执行一个dml语句就会开启一个事务                他会把当前dml语句操作的数据进行锁定,别人在操作这些数据的时候就需要等锁            事务的结束                当事务结束的时候会释放掉当前事务所拥有的锁                                显示的事务结束                    rollback:事务的回滚                        回到开启事务的之前的状态                    commit:事务的提交                        将数据写入到数据库                隐式的事务结束                    执行DDL(创建表)语句会提交当前事务                    正常退出数据库会提交事务                    非正常退出会回滚事务                        制造oracle数据库的死锁        窗口1            UPDATE EMP SET SAL = 888 WHERE EMPNO = 7788;        窗口2            UPDATE EMP SET SAL = 666 WHERE EMPNO = 7934;        窗口1            UPDATE EMP SET SAL = 666 WHERE EMPNO = 7934;        窗口2            UPDATE EMP SET SAL = 888 WHERE EMPNO = 7788;                    ORACLE死锁是非常影响性能的,所以有自己的死锁检测机制            Oracle查询也会开启事务        SELECT * FROM EMP FOR UPDATE;            事务的隔离级别        定义            在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。                                更新丢失            两个事务都同时更新一行数据,一个事务对数据的更新把另一个事务对数据的更新覆盖了            两个事务同时操作一条数据,如果没有锁,那么我正在更改的数据可能会覆盖别人的数据        脏读            一个事务读取到了另一个事务未提交的数据操作结果            如果A线程更新数据为888,然后锁定,如果这个时候b线程可以看到这个数据        不可重复读            一个事务对同一行数据重复读取两次,但是却得到了不同的结果            虚读                别的事务对其做了修改操作            幻读                别的事务对其做了 新增 删除 操作                SQL定义了一些级别去避免这些问题            未授权读取,也称为读未提交(Read Uncommitted)                可以避免更新丢失,但是不能避免脏读            授权读取,也称为读提交(Read Committed)                可以避免脏读,但是不能避免  不可重复读            可重复读取(Repeatable Read)                避免了脏读和虚读和幻读的删除操作                但是不能避免幻读的新增操作            序列化      序列化(Serializable):提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行    事务的四大特征            原子性( Atomicity )、            一致性( Consistency )、            隔离性( Isolation )            持续性( Durability )。            这四个特性简称为 ACID 特性。         1 、原子性         事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做         2 、一致性         事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。         3 、隔离性         一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。         4 、持续性         也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。            */  --CREATE TABLE BANK AS SELECT * FROM EMP;--窗口1UPDATE BANK SET SAL = SAL - 1000 WHERE EMPNO = 7839 AND ENAME = 'KING' AND SAL >= 1000;UPDATE BANK SET SAL = SAL + 1000 WHERE EMPNO = 7369 AND ENAME = 'SMITH';    --窗口2UPDATE BANK SET SAL = 10  WHERE EMPNO  = 7839;

 

/*
    
        
访
使
        
java
  synchronized
        
dml
        
        
        
        
oracle
             
                  
dml
                  
dml
,
             
                  
                  
                  
                        rollback:
                            
                        commit:
                            
                  
                       
DDL
                       
退
                       
退
                       
    
oracle
        
1
             
UPDATE  EMP  SET  SAL 
= 
888 
WHERE  EMPNO 
= 
7788;
        
2
             
UPDATE  EMP  SET  SAL 
= 
666 
WHERE  EMPNO 
= 
7934;
        
1
             
UPDATE  EMP  SET  SAL 
= 
666 
WHERE  EMPNO 
= 
7934;
        
2
             
UPDATE  EMP  SET  SAL 
= 
888 
WHERE  EMPNO 
= 
7788;
             
         ORACLE
    
    
     Oracle
        
SELECT * 
FROM  EMP  FOR 
UPDATE;
        
    
        
             
             
             
        
             
             
        
             
             
A
线
888
b
线
        
             
             
                  
             
                  
 
 
 
        
         SQL
             
,
Read  Uncommitted
                  
             
,
Read  Committed
                  
  
             
Repeatable  Read
                  
                  
             
      
Serializable
 
    
             
  Atomicity 
             
  Consistency 
             
  Isolation 
             
  Durability 
             
  ACID 
 
        
1 
 
        
 
        
2 
 
        
使
 
 
 
        
3 
 
        
使
 
        
4 
 
        
    
        
*
/  
--
CREATE  TABLE  BANK 
AS 
SELECT * 
FROM  EMP;
 
--1
UPDATE  BANK  SET  SAL 
=  SAL 
- 
1000 
WHERE  EMPNO 
= 
7839 
AND  ENAME 
= 
'KING' 
AND  SAL 
>= 
1000;
UPDATE  BANK  SET  SAL 
=  SAL 
+ 
1000 
WHERE  EMPNO 
= 
7369 
AND  ENAME 
= 
'SMITH';    
 
--2
UPDATE  BANK  SET  SAL 
= 
10  
WHERE  EMPNO  
= 
7839;
posted @
2017-05-31 10:35 阅读(
...) 评论(
...)

转载地址:http://jwjab.baihongyu.com/

你可能感兴趣的文章
python通过librados库通过底层的rados操作ceph的对象存储和块存储
查看>>
在客户端使用python来调用boto S3 API来操作librados库
查看>>
ceph存储数据的详细流程(CRUSH)
查看>>
linux内核模块详解
查看>>
ceph集群的扩展(centos7环境)
查看>>
linux命令之top(查看cpu、内存等负载)
查看>>
linux_详解find命令
查看>>
openstack的swift组件详解
查看>>
两大主流开源分布式存储的对比:GlusterFS vs. Ceph
查看>>
面试笔试动态规划问题--python篇
查看>>
linux下的svn常用命令使用指南
查看>>
阿里云iot事业部一面面经
查看>>
《云计算架构技术与实践》
查看>>
《云计算架构技术与实践》序言(李德毅院士)
查看>>
《云计算架构技术与实践》连载(2):1.2 云计算的发展趋势
查看>>
《跨界杂谈》企业商业模式(七):其他
查看>>
STL介绍 - map
查看>>
ssh 命令的用法
查看>>
scp 命令的用法
查看>>
ldcofig 命令的用法
查看>>