Oracle数据库中数据操作和事务控制以及锁

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Youth_Mr6/article/details/81461714


表数据的操作(DML):
    插入:
    修改:
    删除:
    合并:大数据操作的时候,数据仓库
    
插入:使用values只能插入一行数据
    插入空值:
        1)不写
        2)插入空串
        3)null
    
    插入日期:
        1)按照Oracle标准日期格式插入,'dd-mm月-yyyy'
        2)to_date('','yyyy-mm-dd')
        3)to_char同to_date
        
    特殊字符&:
        在SQL Plus或者cmd中设置
        1)show escape;            --查看escape状态
        2)escape off            --返回escape状态为off
        3)set escape on;        --设定escape状态为on
        4)show escape            --查看escape状态
        5)escape "\" (hex 5c)    返回escape符号为"\"
        6)在insert语句中使用'\'对特殊符号进行转义
        
    插入多行:
        子查询:嵌套子查询,相关子查询
        INSERT INTO  mydept(deptno,dname,loc)  SELECT *  FROM dept ;--插入中的子查询不需要加()
        
创建表:
    CREATE TABLE 表名 AS SELECT * FROM emp WHERE 1=0;--where条件恒不成立表示只要表结构不要数据;若where条件成立表示要满足where条件的数据;不加where条件表示既要表结构又要数据

合并:如果匹配则修改,如果不匹配则插入
    语法:
    MERGE INTO mydept  m  --目标表
      USING dept d  --原表
      ON ( m.deptno=d.deptno )   --条件
      WHEN MATCHED THEN
      UPDATE SET
        dname='zzz',loc='zzz' WHERE deptno=11
      WHEN NOT MATCHED THEN
      INSERT(m.deptno,m.dname,m.loc)
       VALUES(d.deptno,d.dname,d.loc);

    
rowid:伪列,是表中的虚拟的列,是系统自动产生的,效率最快
    表示一行的物理地址,可以唯一标识该行
    前6位:数据对象编号,接下3位:相关文件编号,接下6位:块编号,末3位:行号


事务:
    概念:
        事务也称工作单元,是由一个或者多个SQL语句所组成的操作序列的集合,这些SQL语句作为一个完整的工作单元(Oracle最小的工作单元,不可分割),要么全部执行成功,要么全部执行失败.在数据库中,通过事务来保证数据的一致性
    
    事务处理语言:TPL
        对组成事务的DML语句的操作结果进行确认或取消(commit,rollback)
        
    事务的组成:
        在数据库中,事务由一组相关的DML或select语句,加上一个TPL语句(commit,rollback)或一个DDL语句(create,alter,drop,truncate等)或一个DCL语句(grant,revoke)组成.
            DDL语句,DCL语句数据库进行隐式提交.
    
    
    事务特征:(ACID)
        1)原子性(Atomicity):
            事务就像原子一样,不可被分割,组成事务的DML操作语句要么全部执行成功,要么全部执行失败,不可能出现部分失败的情况
        2)一致性(Consistency):
            一旦事务完成,不管是成功的还是失败的,整个系统处于数据一致的状态.
        3)隔离性(Isolation):
            一个事务的执行不会被另一个事务所干扰
        4)持久性(Durability):
            也成为永久性,事务一旦提交,对数据的改变就是永久的,不可以再被回滚
        
    事务分类:
        1)显式事务:
            1-1)显式提交:commit
                以成功的方式结束事务,组成事务的DML语句全部生效
            1-2)显式回滚:rollback
                以失败的方式结束事务,组成事务的DML语句全部取消
            1-3)保存点:savepoint
        2)隐式事务:
            2-1)隐式提交:当下列任意一种情况发生时,会发生隐式提交
                2-1-1)执行一个DDL(create,alter,drop,truncate,rename)语句;
                2-1-2)执行一个DCL(grant,revoke)语句;
                2-1-3)从SQL Plus正常退出(使用exit或quit命令退出)
            2-2)隐式回滚:当下列任意一种情况发生时,会发生隐式回滚
                2-2-1)从SQL Plus中强制退出
                2-2-2)客户端连接到服务器端异常中断
                2-2-3)系统崩溃
            
    事务的开始和结束:
        事务开始:
            事务自动开启于上一个事务结束后第一个执行的DML语句
        事务结束:
            显式结束:事务在遇到commit或者rollback时结束
            隐式结束:执行隐式事务时会自动结束事务
        
    设置保存点:
        如果在一个事物内,想要回滚到指定的位置,不是回滚到事务的起始点,可以通过保存点实现
        savepoint  sp;--定义一个保存点语句
        rollback to sp;--回滚到指定保存点
            以上两条语句不结束事务的执行
        

Oracle的锁机制:
    概念:
        1)锁是用来在多用户并发访问和操作数据库时,保证数据的一致性的一种机制
        2)锁有Oracle自动管理,如一个DML操作,Oracle默认的机制是在DML操作映像的行记录上自动加锁
        3)锁在被相关的操作申请并持有后,会一直保持到事务的结束,事务结束后,锁才会被释放
        4)查询语句不会锁定任何记录,如果在查询语句后面加for update子句会锁定查询所影响的行记录

    1)行级加锁:默认行级锁,针对dml语句
    2)表级加锁:
    
    Oracle加锁方式:
        1)自动加锁:用户在执行insert,update,delete,DCl,DDL语句时,Oracle会自动加锁
        2)手动加锁
            2-1)表级加锁:
                LOCK TABLE 表名 IN 锁类型 MODE [NOWAIT]
            2-2)行级加锁:
                SELECT 查询列 FROM 表名 FOR UPDATE [NOWAIT]
        
    锁的类型:
        排它锁(Exclusive):不能在其上再加其他锁
        共享锁(share):可以在其上再加共享锁
        
    提交或回滚前数据状态
        1)数据变化前的状态可以被恢复
        2)当前会话可以使用select语句来验证DML操作后的结果
        3)其他会话不能查看当前用户的DML操作结果
        4)受影响纪录被锁定,也就是其他用户不能改变受影响记录中的数据
    提交后数据状态
        1)在数据库中数据变化为永久性的,先前的数据状态永久性消失
        2)所有用户/会话都可以查询到提交后的结果
        3)锁定的记录被释放,可以有效地被其他用户操作
        4)所有的存储节点被清除
    回滚后数据状态
        1)先前的数据状态被恢复
        2)锁定的记录被释放
        3)所有的存储节点被清除

猜你喜欢

转载自blog.csdn.net/Youth_Mr6/article/details/81461714