Oracle——事务(Transaction)

事务:


  事务是指作为单个逻辑工作单元执行的一组相关操作。  


  这些操作要求全部完成或者全部不完成。


使用事务的原因:保证数据的安全有效。


事务的四个特点:(ACID)


  1、原子性(Atomic):事务中所有数据的修改,要么全部执行,要么全部不执行。


  2、一致性(Consistence):事务完成时,要使所有所有的数据都保持一致的状态,换言之:通过事务进行的所有数据修改,必须在所有相关的表中得到反映。


  3、隔离性(Isolation):事务应该在另一个事务对数据的修改前或者修改后进行访问。


  4、持久性(Durability):保证事务对数据库的修改是持久有效的,即使发生系统故障,也不应该丢失。


事务组成:


  一条或者多条DML,[一条DDL]和一条DCL。


事务的分类:


  1、显式事务:


    (1)要去显式的调用DCL。


    (2)只有用到COMMIT以后才会真正写入数据库,也持久化了。


  2、隐式事务:


    (1)如果人工要使用隐式事务,SET AUTOCOMMIT ON (只针对一个连接)


    (2)以下情况为自动提交:


       1)正常执行完成的DDL语句:create、alter、drop


       2)正常执行完场的DCL语句GRANT、REVOKE


       3)正常退出的SQLPlus或者SQL Developer等客户端


回滚:


  RollBack只能对未提交的数据撤销,已经Commit的数据是无法撤销的,因为commit之后已经持久化到数据库中。


  


脏读(Dirty Read):事务T1更新了一行数据,还没有提交所做的修改,T2读取更新后的数据,T1回滚,T2读取的数据无效,这种数据称为脏读数据。


不可重复读(UNrepeatable Read):事务T1读取一行数据,T2修改了T1刚刚读取的记录,T1再次查询,发现与第一次读取的记录不相同,称为不可重复读。


幻读(Phantom Read):事务T1读取一条带WHERE条件的语句,返回结果集,T2插入一条新纪录,恰好也是T1的WHERE条件,T1再次查询,结果集中又看到T2的记录,新纪录就叫做幻读。


隔离级别:


  NO_TRANSACTION     不支持事务


  READ_UNCOMMITED    允许脏读、不可重复读、幻读


  READ_COMMITED      允许不可重复读、幻读,不允许脏读


  REPEATABLE       允许幻读,不允许脏读、不可重复读


  SERIALIZABLE       脏读、不可重复读、幻读都不允许


Oracle支持SQL92标准的READ_COMMITED、SERIALIZABLE,自身特有的READ_ONLY


 


锁:


排它锁:(X锁,eXclusive LockS)


  当有DML语句执行的时候,设计的行都会加上排它锁,其他事物不能进行读取修改。


共享锁:(S锁,Shared Locks)


  加了共享锁的数据,可以被其他事物读取,但不能修改。如select语句。


为了保证性能:乐观锁,悲观锁


  悲观锁:每次都是假设数据肯定会冲突,数据开始读取时就把数据给锁住。


  乐观锁:每次都是假设一般情况下不会发生数据冲突,只有数据更新提交的时候,才会对数据的冲突与否进行检测,如果发生冲突,返回错误信息让用户处理。



-----------------------------------------------------------------------------------

1. 数据定义语言DDL
数据定义语言DDL用来创建数据库中的各种对象-----表、视图、索引、同义词、聚簇等如:
CREATE TABLE/VIEW/INDEX/SYN/CLUSTER
DDL操作是隐性提交的!不能rollback  

2 .数据操纵语言DML
数据操纵语言DML主要有三种形式:
1) 插入:INSERT
2) 更新:UPDATE
3) 删除:DELETE

3. 数据查询语言DQL
数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块:
SELECT <字段名表>
FROM <表或视图名>
WHERE <查询条件>

4. 数据控制语言DCL
数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
1) GRANT:授权。

2) ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
回滚---ROLLBACK
回滚命令使数据库状态回到上次最后提交的状态。其格式为:
SQL>ROLLBACK

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值