Oracle之同义词、事务、锁(八)

1、同义词

1、同义词概述

它是 Oracle 给数据库中的对象取的另一个名字,类似于 SQL 语句中的别名,但是和别名又有区别,别名只能用在 SQL 语句中,同义词是保存在数据库中的,一次创建可以一直使用。同义词使用和使用原对象完全一样,可以给表、视图等起同义词

2、同义词共有两种类型

  • 公有同义词可被所有的数据库用户访问
  • 私有同义词只能在其模式内访问,且不能和当前模式的对象同名

3、创建同义词的语法

create [public] synonym synonym_name for object;

synonym 是同义词关键字
object 取同义词的对象,可以是表、视图等
如:

create synonym e for emp;
select * from emp;
select * from e;
--创建或替换现有的同义词
create or replace synonym emp_syn for scott.emp;

4、删除同义词

drop synonym e;
drop public synonym emp_syn;

5、给用户赋予创建同义词的权限

grant create any synonym to 用户名;

2、事务

1、事务概述

事务(transaction)是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向系统提交,要么都执行,要么都不执行
事务是一个不可分割的工作逻辑单元。
例如:
银行转账过程就是一个事务,它需要两条 update 语句来完成,这两条语句是一个整体,如果其中任何一条出现错误,则整个转账业务也应取消,两个账户中的余额应恢复到原来的数据

2、事务的ACID属性

1、原子性(Atomicity):事务是一个完整的操作,事务的各步操作是不可分的(原子的),要么都执行,要么都不执行
2、一致性(Consistency):当事务完成时,数据必须处于一致状态
3、隔离性(Lsolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务
4、永久性(Durability):事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性

3、数据库事务的组成部分

  • 一个或多个DML语句
  • 一个DDL(数据定义语言)语句
  • 一个DCL(数据控制语言)语句

4、数据库事务的开始与结束

1、以第一个DML语句的执行作为开始
2、以下面的其中之一作为结束

  • commit 或 rollback 语句      
    
  • DDL 语句(自动提交)
    
  • 用户会话正常结束
    
  • 系统异常终止
    

5、操作事务

事务提交:commit
事务回滚:rollback
声明保存点:savepoint 保存点名字
回滚保存点:rollback to savepoint 保存点名字

6、事务的分类

显式事务:

1、set autocommit off --关闭事务的自动提交
2、手动调用 commit 和 rollback

隐式事务:

1、set autocommit on
2、create、drop、grant 等操作事务是自动提交
3、每一个 insert、update、delete 执行后都会提交到数据库

7、事务进程

1、自动提交在以下情况中执行

  • DDL语句
  • DCL语句
  • 不适用 commit 或 rollback 语句提交或回滚,正常结束会话
    2、会话异常结束或系统异常会导致自动回滚

8、提交或回滚事务前的数据状态

1、改变前的数据状态是可以恢复的
2、执行 DML 操作的用户可以通过 select 语句查询之前修正
3、其他用户不能看到当前用户所做的改变,直到当前用户结束事务
4、DML 语句所涉及到的行被锁定,其他用户不能操作

9、提交事务后的数据状态

1、数据的改变已经被保存到数据库
2、改变前的数据已经丢失
3、所有用户可以看到结果
4、锁被释放,其他用户可以操作涉及到的数据
5、所有保存点被释放

10、回滚后的数据状态

使用 rollback 语句可以使数据变化失效
1、数据改变被取消
2、修改前的数据状态被恢复
3、锁被释放

3、锁

1、锁概述

锁是数据库用来控制共享资源并发访问的机制
锁用于保护正在被修改的数据
直到提交或回滚了事务之后,其他用户才可以更新数据

2、锁分类

1、行级锁

行级锁是一种排它锁,防止其他事务修改此行。在使用以下语句时,Oracle 会自动应用行级锁

  • update
  • delete
  • select … for update;
  • select … for update[wait n | nowait]语句允许用户一次锁定多条记录进行更新,使用 commit 或 rollback 语句释放锁
2、表级锁

锁定整个表,限制其他用于对表的锁定
使用命令显式的锁定表,应用表级锁的语法是

lock table 表名 in 锁类型 mode;

  • 行共享(row share):禁止排他锁定表
    
  • 行排他(row exclusive):禁止使用排他锁和共享锁
    
  • 共享锁(share):
    
  • 锁定表,仅允许其他用户查询表中的行
  • 禁止其他用户插入、更新和删除行
  • 多个用户可以同时在同一个表上应用此锁
  • 共享行排他(share row exclusive):比共享锁更多的限制,禁止使用共享锁及更高的锁
    
  • 排他锁(exclusive):限制最强的表锁,仅允许其他用户查询该表的行,禁止修改和锁定表
    

你可能感兴趣的:(Oracle,oracle,数据库,sql)