更新及事务处理
一、更新操作
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 数据库控制语言
授权相关的语句