oracle修改表的内容和事务性

 

修改表的内容和事务性

一、使用insert添加行

**添加行
insert into table_name(id,name,address)values(6,'john','北京')
**忽略列的列表添加
insert into table_name values(6,'john','北京')
**为列指定空值:
insert into table_name(id,name,address)values(6,'john',null);前提是该字段可为空;

二、使用update修改行

 

三、使用delete删除行

 

四、数据库的完整性

在执行DML(insert update,delete)等操作时,数据库会维护自身结构的完整性,主要有一下约束
**主键约束
**外键约束



五、使用MERGE合并行

merge可以将一个表中的行合并到另一个表中
如:
merge into product p using order p2 on (p.id=p2.id)
when matched then
update set p.name =p2.name p.price=p2.price
when not matched then
insert (p.id ,p.name,p.price) values(p2.id,p2.name,p2.price);
注意:
merge into 指明了合并的操作的目标表
using....into :指定一个表连接
when matched then:指定当一行满足using ....on 子句的条件时执行update操作,不满足时,执行insert操作

六、数据库事务

事务是一组不可分割的SQL语句,在执行时,应该做为一个整体永久性的修改数据内容,或作为一个整体永久性的取消修改数据库内容

如:银行转账的例子

事务的提交和回滚
**提交:commit语句
**回滚:rollback
事务的开始与结束
事务是分割数据库活动的逻辑工作单元,既有起点,又有终点
开始:
*连接到数据库,并执行一条DML语句
*前一个事务结束后,输入了另一条DML语句
结束:
执行commit或rollback
执行一条DDL语句.如create table语句,这种情况会自动执行commti
执行一条DCL语句
断开与数据库连接
保存点
保存点可在事务的任何地方设置,可将修改回滚到保存点处,一般用于很大的事务,使用savepoint sava1;定义,save1为保存点名
如回滚到保存点处:rollback to savepoint save1;
*事务的ACID特性
事务的4个基本特性:
**原子性:事务必须成组地提交或回滚,是一个不可分割的工作单元
**一致性:数据库的状态必须保持一致;无论事务是开始还是结束
**隔离性:多个事务可独立运行;互不影响
**持久性:事务被提交后,数据能永久保存.
并发性
Oracle支持多个用户同时与数据库交互.每个用户都可独立运行自己的事务,若多个用户对同一个表进行操作,则这些事务都是独立的,直到执行一条commit才会发生影响
事务的隔离级别
定义:一个事物对数据库的修改与并行的另一个事物的隔离程度.
事物并行可能出现的问题:
*幻象读取
*可重复读
*脏读:
处理这些问题的措施:
READ UNCMMITTED:幻象读取,可重复读,脏读都容许;
READ CMMITTED;可以幻象读取,可重复读,不可脏读
REPEATABLE READ:容许幻象读取,不容许可重复读,脏读

SERIALIZABLE:幻象读取,可重复读,脏读都不容许;

 

下面介绍一个实例来展示事物隔离级别设置成SERIALIZABLE的效果

首先定义2个事物:T1和T2,T1使用默认的隔离级别READ CMMITTED;T2使用SERIALIZABLE级别,T1和T2都对如person表进行操作,然后T1在person表中新增一行,并修改该表的一行记录,由于T2的事物隔离级别设置成ERIALIZABLE级别,则看不到T1的更改和插入,这是因为读取新插入的一行是幻象读取,查询修改过的行是不可重复读,而SERIALIZABLE级别对这2中操作都不支持

 
T1(READ CMMITTED) T2(SERIALIZABLE级别)
  settransaction isolation level serializable
select * from person; select * from person;
insert into person(id,name)values(1,"john")  
update person p set p.name="lily" where p.id =1;  
select * from person;
select * from person;
返回结果中包含插入的新行和修改的行 返回结果与原来的相同,以为T2的事物隔离级别设置为serializable
 

 

 
 
 
 
 
 
 

 

 

 

 

 

猜你喜欢

转载自wwc2013.iteye.com/blog/2035720
今日推荐