会话与事务
如果一个会话断开和数据库的连接,而没有使用commit或rollback终止当前事务,那么该事务会自动被数据库撤销(roll back)
在您退出Sql*Plus时,会自动发出一条commit命令
事务由一系列SQL语句组成,一个事务就是一个整体成败的单元
事务的结束方式有两种:提交和回滚
事务控制语句
Commit 完成事务,数据修改成功并对其他用户开放
Rollback 撤消事务,撤消所有操作
SAVEPOINT 设置回滚点
Rollback to savepoint  撤消在设置的回滚点以后的操作
在启动一个块时,不代表该事务被启动了。事务的开始不需要和块的开始相一致
锁的概念
锁用来锁定相关资源,锁归事务所有
锁是数据库用来控制共享资源并发访问的机制
锁用于保护正在被修改的数据
在事务开始或开始后的某一时刻,事务依情况取得相应的锁,直到事务结束事务所持有的所有的锁才被释放
锁定的优点
并行性 -允许多个用户访问同一数据
一致性 - 一次只允许一个用户修改数据
完整性 - 为所有用户提供正确的数据。如果一个用户进行了修改并保存,所做的修改将反映给所有用户
锁的分类:
 行级锁:对正在被修改的行进行锁定。其他用户可以访问除被锁定的行以外的行
 顾名思义行锁不会锁住整张表,它仅锁住相关行。行锁都是排它的。
 一般的查询语句如select ... from ...语句影响的行不会被锁住
 但select ... from ... for update语句影响的行会被行级排它锁住。其他事务只能查询这些数据行,不能进行update、delete或select...for update操作
 insert / update / delete ...语句影响的行会被行级排它锁住。其他事务只能查询这些数据行,不能进行update、delete或select...for update操作。
 表级锁
  锁定整个表,限制其他用户对表的访问
      --->表级共享锁LOCK TABLE  <table_name> IN SHARE MODE
   该语句将在<table_name>上设置表级共享锁。该锁设置之后,其他事务仅能查看<table_name>表,不能增、删、改
<table_name>表,其他事务可同时放置表级共享锁于<table_name>表上。
       --->表级排它锁LOCK TABLE <table_name> IN EXCLUSIVE MODE
   表级排它锁与表级共享锁非常相似,但每次只有一个用户可以在表中放置排它锁,却可以有多个用户同时在同一个
表中放置共享锁。

事务阻塞 :
当A事务锁住了某种资源,而同时B事务发出对这种资源的修改语句,则B事务将会被阻塞
我们可规定等待他事务释放锁的等待时间,如:
select ... from ... for update wait 10;           ------将会等待10秒
LOCK TABLE table1 IN EXCLUSIVE MODE NOWAIT;

死锁:
当两个事务相互等待对方释放资源时,就会形成死锁
Oracle会自动检测死锁,并通过结束其中的一个事务来解决死锁
右边是一个死锁的例子