ITPub博客

首页 > 应用开发 > IT综合 > SG_007_CHAPTER 6

SG_007_CHAPTER 6

原创 IT综合 作者:chenai79921 时间:2009-10-18 14:41:54 0 删除 编辑

Using DML Statements:

INSERT

Update

Merge

Delete

select for update

lock table

Inserting Rows into a Table:

Inserting into a Single Table:

Insert into schme.tabel@dblink (column) values(value);

注意:(column)是可选的,默认是全部column。

可以从ALL_TAB_COLUMNS , USER_TAB_COLUMNS, DBA_TAB_COLUMNS中查看所有表的column。

不可以在视图中插入:汇聚函数,distinct,set operator ,group by ,order by,

connect by,子查询。

Inserting into Multiple Tables:

Insert (all | first) WHEN condition THEN INTO clause ELSE INTO clause ;

All:判断每一个condition

First:判断第一个结果为‘true’,就结束。下面的condition就不判断了。

INTO clause既

into schema.table(column) values (value);

Updating Rows in a Table:

Update table

Set column=xxx

Where condition;

Merging Rows into a Table:

此命令用来在表中升级以及插入条目数据。

MERGE INTO schema.table1

USING schema.(table2 | subsquery)

on (condition)

WHEN MATCHED THEN UPDATE SET column = expression

WHEN NOT MATCHED THEN INSERT(column) VALUES (expression)

向table1中做操作,对table2中的数据与table1中的数据,做一个判断(on condition)。如果符合,那么更新table1,如果不符合插入table1

Deleting Rows from a Table:

Delete from table

Where condition

Truncating a Table:

TRUNCATE是删除表中的数据,但是属于DDL命令。

Ddl和dml区别,直接commit,无法rollback。

DDL: CREATE ALTER DROP TRUNCATE

TRUNCATE TABLE schema.table ( DROP REUSE) STORAGE;

DROP STORAGE 是默认的,收缩表的extent

REUSE 不收缩表的extent,不进行回收。高水位线复位。

TRUNCATE 和DELETE的区别:

1.T不产生undo information

2.T是ddl ,delete是dml

3. truncate重新设定表和索引的HWM(高水标记),由于全表扫描和索引快速扫描都要读取所有的数据块知道HWM为止
所以全表扫描的性能不会因为delete而提高,但是经过truncate操作后速度会很快

4. T does fire(触发) any delete triggers

5.一个用户不可能会被赋予使用truncate删除其他用户表的权限。

6.当表被T时,表和索引的存储空间设置为初始大小。Delete不会收缩表或索引的大小。

7.T父表之前,先要disable掉referential integrity constraint。

TRUNCATE 和 DROP 的区别:

1. delete/truncate 只删除数据不删除表,索引的结构。

2. drop 将表所占用的空间全部释放,segment 不存在,无所谓 HWM 的概念。

Selecting Rows FOR UPDATE:

锁住特定行,防止其他会话改变或者删除那些被锁住的行数据,当这些行被锁住的时候,其他会话可以选择这些行,但是不能改变或者锁住这些行。

这个状态,直到该事务结束才终止。

Locking a Table:

锁可以控制并发操作。

锁的类型: 排他锁(exclusive locks)X锁。此时其他事务不能对它读取和修改。

共享锁(Share locks)S锁。其他事务可以读取,但是不能修改。

根据保护对象不同,锁的类型:

DML锁(data locks,数据锁) 保护数据完整性

DDL锁 (dictionary locks,字典锁)保护数据库对象结构

内部锁和闩(internal locks and latcher)保护数据库内部结构

DML锁包括:TM锁和TX锁,TM锁为表级锁。TX锁为行级锁。

当oracle执行DML语句时,自动在所要操作的表上申请TM锁(SS,SX,S,X),当TM锁获得之后,自动申请TX锁。在加锁检查TX锁的相容性的时候,直接检查TM锁模式相容性即可。

表级锁具有以下几种模式:

行共享(row share,RS),

行排他(row exclusive,RX),

共享(share,S),

共享行排他(share row exclusive,SRX),

及排他(exclusive,X)。

各种模式的表级锁具有的限制级别决定了其是否能与其他表级锁共处于同一数据表上。

行共享表级锁(row share table lock)(SS):

SELECT ... FROM table ... FOR UPDATE OF ... ;

LOCK TABLE table IN ROW SHARE MODE

锁限制程度最低,保证表的最大的并发访问能力。某个事务拥有某个表的行共享表级锁之后,其他事务依然可以并发地对相同数据表执行查询,插入,更新,删除操作,换句话说,其他事务也可以获得相同表上的行共享,行排他,共享,以及共享行排他模式的表级锁。

禁止:当某个事务拥有了某个表的行共享表级锁之后,会禁止其他事务通过以下语句排他的对相同的表进行写操作:

LOCK TABLE table IN EXCLUSIVE MODE;

行排他表级锁(row exclusive table lock)(SX)

INSERT INTO table ... ;

UPDATE table ... ;

DELETE FROM table ... ;

LOCK TABLE table IN ROW EXCLUSIVE MODE;

这个锁比行共享表级锁(RS)的限制程度略高。

允许操作:某个事务拥有了某个表的行排他表级锁后,其他事务依然可以并发地对相同数据表执行查询,插入,更新,删除。或对表内数据行加锁的操作。这个锁允许其他多个事务同时获得表上的行共享表级锁或行排他表级锁。

禁止操作:拥有某个表的行排他表级锁之后,将禁止其他事务手工地对表加锁,进行排他地读写操作。下列语句不能用来对相同的表加锁:

LOCK TABLE table IN SHARE MODE;

LOCK TABLE table IN SHARE EXCLUSIVE MODE;

LOCK TABLE table IN EXCLUSIVE MODE;

共享表级锁(share table lock)(S):

LOCK TABLE table IN SHARE MODE;

允许操作:某个事务拥有了此锁之后,其他事务可以查询表,可以使用SELECT..FROM UODATE锁定选中的数据行,可以LOCK TABLE…IN SHRE MODE语句。但是其他事务不能对表进行更新操作。多个事务可以并发地获得同一个表上的共享表级锁,在此种情况下,任何事务都不能对表进行更新。因此,拥有共享表级锁的事务只有在此表上没有其他事务的共享表级锁时,才能对表进行更新操作。

禁止的操作:某个事务拥有了某个表的共享表级锁后,将禁止其他事务修改此表,同时禁止其他事务执行以下语句:

LOCK TABLE table IN ROW EXCLUSIVE MODE;

LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;

LOCK TABLE table IN EXCLUSIVE MODE;

共享行排他表级锁(share row exclusive table lock)(SRX)

LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;

允许的操作:同一时间只有一个事物能够获得表的共享行排他表级锁。某个事务拥有了某个表的共享行排他表级锁后,其他事务可以查询表,可以使用 SELECT ... FOR UPDATE 语句锁定选中的数据行,但不能对表进行更新操作。

禁止的操作:拥有共享行排他表级锁的事务将阻止其他事务获取行排他表级锁(row exclusive table lock)来修改数据。共享行排他表级锁还能阻止其他事务在相同表上获取共享表级锁(share table lock),共享行排他表级锁(share row exclusive table lock),及排他表级锁(exclusive table lock)。概括来说,其他事务不能执行以下语句。

LOCK TABLE table IN ROW EXCLUSIVE MODE;

LOCK TABLE table IN SHARE MODE;

LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;

LOCK TABLE table IN EXCLUSIVE MODE;

排他表级锁(exclusive table lock)(X):

LOCK TABLE table IN EXCLUSIVE MODE;

允许的操作:同一时间只有一个事务能获得表上的排他表级锁。一个事务获得排他表级锁后,其他事务只能对表进行查询操作。

禁止的操作:一个事务获得排他表级锁后,将禁止其他事务对表执行任何 DML 操作,其他事务也无法获取表上任何类型的锁。

LOCK Prevents Allows Acquiring Statements

SS(row share) X SS,SX,S,SRX SELECT FOR UPDATE

LOCK TABLE

SX(Row Exclusive) X,SRX,S SS INSERT

MERGE

UPDATE

DELETE

LOCK TABLE

S(Share) X,SRX,SX SS,S LOCK TABLE

SRX(share row exclusive) X,SRX,S,SX SS LOCK TABLE

X(Exclusive) X,SRX,S,SX,SS LOCK TABLE

SQL 语句

表级锁模式

RS

RX

S

SRX

X

SELECT...FROM table...
 

无
 

Y
 

Y
 

Y
 

Y
 

Y
 

INSERT INTO table ...
 

RX
 

Y
 

Y
 

N
 

N
 

N
 

UPDATE table ...
 

RX
 

Y*
 

Y*
 

N
 

N
 

N
 

DELETE FROM table ...
 

RX
 

Y*
 

Y*
 

N
 

N
 

N
 

SELECT ... FROM table
FOR UPDATE OF ...

 

RS
 

Y*
 

Y*
 

Y*
 

Y*
 

N
 

LOCK TABLE table IN ROW SHARE MODE
 

RS
 

Y
 

Y
 

Y
 

Y
 

N
 

LOCK TABLE table IN ROW EXCLUSIVE MODE
 

RX
 

Y
 

Y
 

N
 

N
 

N
 

LOCK TABLE table IN
SHARE MODE

 

S
 

Y
 

N
 

Y
 

N
 

N
 

LOCK TABLE table IN
SHARE ROW EXCLUSIVE MODE

 

SRX
 

Y
 

N
 

N
 

N
 

N
 

LOCK TABLE table IN EXCLUSIVE MODE
 

X
 

N
 

N
 

N
 

N
 

N
 

Understanding Transaction Control:

COMMIT : 结束当前事务,把数据永久地写入。使其他会话对此数据可见。

ROLLBACK: undo当前事务所有改变的数据。

ROLLBACK TO SAVEPOINT: 返回到保存点。

SET TRANSATION : 保证事务或者命令一致,为事务指定rollback 段。

Enabling Transaction-Level or Statement-Level Consistency

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;(事务级的)

返回的数据总是最新的。

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;(默认的语句级的)

所返回的数据是在语句执行(执行时候那一刻的数据),处理的数据。

Specifying a Rollback Segment for a Transaction:

Oracle自动为事务指定一个回滚段。通常对小的事务这种方法很平常。

使用set transaction 分配一个大的回滚断段。

SET TRANSACTION USE ROLLBACK SEGMENT rb_large

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/11997930/viewspace-1027941/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: SG_007_CHAPTER 5
下一篇: SG_007_CHAPTER 7
请登录后发表评论 登录
全部评论
  • 博文量
    19
  • 访问量
    14161