Oracle DML 数据更新

来源:互联网 发布:树莓派 php 编辑:程序博客网 时间:2024/05/12 08:51


1.UPDATE:更新记录
UPDATE <表名称> SET <列名称1>=<新值1>[,<列名称2>=<新值2>] WHERE <更新条件>
UPDATE person SET address = '湖南',city='祁阳' WHERE name = '曹焰滨'
2.DELETE:删除记录
DELETE FROM <表名> [WHERE <删除条件>]
3.TRUNCATE TABLE <表名>:截断表(删除记录),不经过缓冲区
3.session:会话(数据库连接)
两个session的事务是隔离的
4.Oracle事务
(1).事务四大特性
A.原子性(Atomicity)
事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。
C.一致性(Consistency)
事务的一致性指的是一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。
I.分离性(Isolation)、
分离性指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。
D.持久性(Durability)
持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。
(2).事务隔离级别
●脏读:脏读是指在一个事务过程里读取了另一个未提交事务中的数据
●不可重复读:一个事务范围内多次查询某个数据却读取到了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
●幻读:一个事务范围内更新符合条件的数据,却发现插入了没有被更新的数据
SQL标准定义了以下几种事务隔离级别:
①Serializable(串行化):可避免脏读、不可重复读、幻读
②Repeatable(可重复读):可避免脏读、不可重复读
③Read-committed(读以提交):可避免脏读的发生
④Read-uncommitted(读未提交):任何情况无法保证
Oraclet数据库支持Read-committed和Serializable两种事务隔离级别,所有Oracle不支持脏读。
5.事务控制命令:
COMMIT 事务提交
ROLLBACK 事务回滚(保护原始数据不被改变)

6.死锁
造成死锁的原因是多个线程对一些数据进行更新操作时造成相互等待的情况
举例:
create table example (id number,name varchar2(32));
insert into example (id,name) values(111,'ooo');
insert into example (id,name) values(222,'ttt');
session1:
update example set id=1111,name='session1' where id=111;
session2:
update example set id=2222,name='session2' where id=222;
session1:
/*等待session2事务结束*/
update example set id=2222,name='session1' where id=222;
session2:
/*等待session1事务结束,sessioin1和session2相互等待造成死锁*/
update example set id=1111,name='session2' where id=111;