插入操作
引入:
DML:查询(DQL),更新(增加,修改,删除)
复制表操作
create table emptemp as select * from emp;
形式
·插入一条新数据
insert into tablename(column...) values(value....)
·插入子查询返回结果
insert into tablename(column...)subquery
所接触到的数据类型(varchar2,number,date)
命令行下查询表结构:desc emptemp;
更新操作
形式
·用户指定要更新的数据
使用update table _name set column=value...where condition
·基于子查询更新
使用update table _name set (column....)=(select column ... from table_name .where condition)
删除操作
语法:
delete from table_name where condition
事务处理
概念解释:
session(会话),表示每一个用户的信息,oracle中每个session拥有独立的事务操作。
事务:指的是一个session所进行的更新操作要么一起成功要么一起失败。
特性:原子性(atomicity)、一致性(consistency)、隔离性/独立性(isolation)、持久性(durability)即ACID特性。
原子性:事务最小单位。
一致性:数据库操作前后一致性。
隔离性:多个事务彼此之间不受影响。
持久性:操作结果保存到磁盘,永远不会回滚。
oracle 事务
set autocommit=off 开启事务处理,取消自动提交
set autocommit=on 关闭事务处理,打开自动提交处理。
commiit:提交事务
rollback to【回滚点】:回滚操作
savepoint 事务保存点名称:设置事务保存点
对每一个session而言,更新操作在事务没有提交时候会放到缓存区中。使用rollback可以回滚(回滚到上一次commit点)。如果删除之后提交了事务,就真正发出了更新指令。
对每一个操作设置保存点的时候,可以使用rollback to[回滚点]
锁的概念
不同session操作同一资源发生的问题。
select *from emptemp where deptno=10 for update;//数据被锁定了(只是查询出的数据被锁定了,其他的数据没有被锁定)。
行级锁
当用户执行了insert,update,delete,for update时候,隐式实现记录锁定,这种锁叫做排它锁(特点事务没提交,会一直独占锁定这些操作数据,其他事务等到锁释放后才能操作)
表级锁lock table)
lock table table_name|view_name,table_name|view_name,...in lock-mode[nowait]
nowait:当试图锁定一张表时候,如果发现已经被其他事务锁定,不会等待。
锁定常见模式:
·row share:行共享锁,在锁定期间允许其他事务并发对表进行各种操作,但是不允许任何事务对同一张表进行独占操作(禁止排它锁)
·row exclusive:行排它锁,允许用户进行任何操作,与行共享锁不同的是,它不能防止其他事务对同一张表进行手工锁定或者独占操作。
·share共享锁:只允许查询不允许修改操作。
·share row exclusive:共享排它锁,允许使用查询操作,但是不允许其他用户使用共享排它锁,for update即是这种。
·exclusive:排它锁,独占的方式锁定表,其他是允许查询,但是不能修改也不能设置任何锁。
使用共享锁:
lock table emptemp in share mode nowait;
解除锁定
锁一旦出现了,可以手工解除。(v$locked_object,v$session)
alter system kill session ‘SID,SERIAL#’;
(session号)
查询锁定情况(超级管理员):
select session_id ,oracle_username,process from v\$locked_object;
//查询锁对象
select sid,serial#,username,lockwait,status,from v\$session where sid in(7);
//查询锁id
总结
···天道酬勤!···