更新及事务处理

一、更新操作

1、CREATE TABLE Test as SELECT * FROM DUAL; 复制表连同数据一起复制

2、INSERT INTO 表名称 (字段)VALUES(列的值);

3、INSERT INTO 表名称 (字段)SELECT (列)FROM DUAL;  注意子查询中的列要和插入表中的列一样

4、UPDATE 表名称 SET (字段,字段......)=(SELECT 字段,字段......FROM 表名称 WHERE  字段=值)

5、关联更新 update TA a set(name, remark)=(select b.name, b.remark from TB b where b.id=a.id)  where exists(select 1 from TB b where b.id=a.id)  注意 :exists后面的语句必须写

二、事务处理:事务只能针对DML(数据操作语言),对(DDL)数据定于语言不起作用,如果执行了DDL(数据定于语言),所有未提交的事务将自动提交

1、

原子性:不能拆分

一致性:要么同时成功,一旦有一个失败,就全部失败。

隔离性:多个事物可以同时进行,但相互之间不会干扰

持久性:系统奔溃时,事务依然可以提交

2、事务操作命令

SET AUTOCOMMIT=OFF 取消自动提交事务处理,开启事务处理

SET AUTOCOMMIT=ON  打开自动提交处理,关闭事务处理

COMMIT  提交事务

ROLLBACK TO  回滚操作

SAVEPOINT  设置事务保存点

三、锁

1、FOR UPDATE语句:手工加锁       SELECT *FROM DUAL FOR UPDATE      

2、行锁:用户执行INSERT、UPDATE、DELETE、SELECT FOR UPDATE语句,ORACLE将其操作的数据锁定,直到其提交或者回滚完成。

3、表锁:表锁只能手动锁定,LOCK TABLE dual IN SHARE MODE NOWAIT

锁的模式:

ROW SHARE:允许其他事务操作,但是不允许独占

ROW EXCLUSIVE:

SHARE:其他事务只能查询,不能修改

SHARE ROW EXCLUSIVE:允许查询操作,不允许其他用户使用共享锁

EXCLUSIVE:事务将独占锁定表,允许其他用户查询,但是不允许修改

4、解锁

查看数据库中的锁定情况

SELECT session_id,oracle_username,process from v$locked_object;

查看v$session数据字典

SELECT sid,serial#,username,lockwait,status FROM v$session where sid IN (SELECT session_id from v$locked_object);

解除锁定

ALTER SYSTEM KILL SESSION (SELECT sid,serial# FROM v$session where sid IN (SELECT session_id from v$locked_object))

 四、DML, DDL, DCL

1、DML 数据操作语言

更新:UPDATE     INSERT       DELETE

查询:SELECT

2、DDL 数据定于语言

CREATE     ALTER    DROP    TRUNCATE

3、DCL   数据库控制语言

授权相关的语句

 

posted @ 2018-01-09 18:01  左右逢源  阅读(185)  评论(0编辑  收藏  举报