SQL <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

INSERT

  一次创建一行。

INSERT   INTO   employees  VALUES
( 9999 , 'Bob' , 'Builder' , 'bob@abc.net' , NULL ,SYSDATE,
'IT_PROG' , NULL , NULL , 100 , 90 );

·  插入另一个表中的多行。(
SELECT 
语句中选择的各个值与要插入的表中的各个列相关联。列值按 
INSERT 
和 
SELECT 
语句中指定的顺序进行匹配

insert   into   dept_80 ( select   *   from   employees  
where   department_id  =   80 ); 

UPDATE

  使用 
UPDATE 
命令可更改表的零行或多行

update   employees 
set   salary  = salary  * 1.1
where   employee_id = 101 ;

DELETE
   

  使用 
DELETE 
命令可从表中删除零行或多行。

delete   from   employees
where   employee_id = 101 ;

MERGE

  使用 
MERGE
命令可在一个命令中执行 
UPDATE
和 
INSERT
。可将一个源中的数据合并到另一个源

1   MERGE  INTO   jobs j
2    USING ( SELECT   *   FROM   jobs_acquisition) a
3     ON (j.job_id = a.job_id)
4     WHEN   MATCHED  THEN   UPDATE   SET   j.job_title = a.job_title
5     WHEN   NOT   MATCHED  THEN   INSERT
6       (j.job_id,j.job_title,j.min_salary,j.max_salary)
7      VALUES (a.job_id,a.job_title,a.min_salary,a.max_salary)

  

COMMIT
提交更改,

ROLLBACK : 回滚操作,撤销更改

PL/SQL (涉及到 SQL
开发,如果仅考试可以浅层掌握

概览 : PL/SQL
oracle
中的过程化编程语言,为
oracle
数据库和应用程序提供了一种公共额编程环境,适用于所有的操作系统或者硬件平台。他的主要特征如下:

  1
对 
SQL 
的过程扩展

  2
平台和产品间的可移植性

  3
更高级别的安全性和数据完整性保护

  4
支持面向对象的编程

管理 
PL/SQL 
对象(
em
中  
“Administration
(管理)
--->program
(程序))

PL/SQL  数据库对象有多种类型:

程序包:程序包是由逻辑关系上相关的一些过程和函数组成的集合,程序包的这一部分又称为说明,用于描述应用程序的借口;他声明了可供使用的类型、变量、常量、异常错误、游标和子程序;

程序包体:程序包体完整的定义了游标和子程序,因此试试了说明,程序包体包含了实施明细和专用申明,这些内容不现实给调用方。

类型主体:类型主体是由与用户定义的数据类型相关联的一些方法(过程和函数)组成的集合;

过程:过程是用于执行特定操作的 PL/SQL
块;

  函数:函数是使用
RETURN PL/SQL 
命令返回单个值的 
PL/SQL 
块。它是具有返回值的过程

  过程 : (用于执行特定操作,使用参数列表传入和传出值。可是使用
CALL
SQL
)或
EXECUTE
调用(
SQL*PLUS
))

  触发器:触发器是当数据库中发生特定事件时执行的 PL/SQL
块,这些时间可以基于表,如果表中插入行时,可以可是数据库时间,如在用户登录数据库时。

  程序包(程序包是由函数和过程组成的集合。每个程序包由程序包体和程序包说明组成)

  内置程序包(管理和维护实用程序,扩展功能)

  DBMS_STATS
:用于收集、查看和修改优化程序统计信息

  DBMS_OUTPUT
:通过 
PL/SQL 
生成输出

  DBMS_SESSION
:通过
PL/SQL 
访问 
ALTER SESSION 
和 
SET ROLE
语句

  DBMS_RANDOM
:生成随机数字

  DBMS_UTILITY
:获取时间、
CPU 
时间和版本信息;计算散列值,以及执行许多其它功能

  DBMS_SCHEDULER
:调度可从 
PL/SQL 
调用的函数和过程

  DBMS_CRYPTO
:对数据库数据进行加密和解密

  UTL_FILE
:通过 
PL/SQL 
读写操作系统文件

  触发器(触发器是存储在数据库中的 
PL/SQL 
代码对象,它们会在某些事件发生时自动运行或
触发
。)

 

  触发器触发事件:

  DML
insert
update/delete
)、
DDL(create,drop,alter,grant,revoke,rename)
和数据库事件
(logon,logoff,startup,shutdown,servererror,suspend)

 

PL/SQL
的结构如下:

DECLARATIVE 

 ----
声明部分:在此声明
PL/SQL
中使用到的变量、类型、及游标,以及局部变量中的存储过程和函数

BEGIN

 ----
执行部分:过程及
SQL
语句,及程序的主要部分

EXCPTION

 ----
执行异常部分:错误处理

END;

其中,执行部分不能省略;

 
锁定 

概览

           使用锁定可防止多个会话同时更改同一数据。

           锁定是在指定语句的最低可能级别自动获取的。

           锁定不会升级。

锁定机制

           执行插入、更新和删除时使用行级锁定

           查询不需要任何锁定

           自动队列管理

  在事务处理(使用 
COMMIT 
或 
ROLLBACK 
操作)结束之前一直保留锁定

数据并发处理

           默认情况下,锁定机制采用细粒度行级锁定模式。不同的事务处理可在同一个表内更新不同的行,彼此不相互干扰。

       

  锁定模式

           ROW SHARE
:允许并发访问锁定的表,但禁止会话锁定整个表进行独占访问。

           ROW EXCLUSIVE
:与 
ROW SHARE 
相同,但是还禁止以 
SHARE
模式锁定。更新、插入或删除数据时会自动获取
ROW EXCLUSIVE 
锁定。

           SHARE
:允许并发查询,但禁止更新锁定的表。需要有(并且会自动请求)
SHARE
锁定才能创建表的索引。

           SHARE ROW EXCLUSIVE
:用于查询整个表,允许其他人查询表中的行,但禁止其他人在 
SHARE 
模式下锁定表或更新行。

           EXCLUSIVE
:允许查询锁定表,但禁止对锁定表执行任何其它活动。需要有
EXCLUSIVE 
锁定才能删除表。

 

  手动锁定 :  LOCK TABLE employees IN EXCLUSIVE MODE;

DM L 锁定 :

           针对正在更新的一行或多行的 
EXCLUSIVE 
行锁定

           针对包含这些行的表的 
ROW EXCLUSIVE 
表级锁定

       排队机制

          1
等待锁定的会话

          2
请求的锁定模式

          3
请求锁定的会话的顺序

锁定冲突

     锁定冲突的可能原因

          1
未提交更改

          2
长时间运行事务处理

          3
不必要的高锁定级别

        4
检测锁定冲突

  在
“Performance
(性能)
页选择
“Blocking Sessions
(阻塞会话)

解决锁定冲突

          1
提交或回退持有锁定的会话

          2
终止持有锁定的会话

  em    kill session

  sql

  SQL> select sid, serial#, username

  from v$session where sid in

  (select blocking_session from v$session)

  ------------------------------------------------------

  alter system kill session '144,8982' immediate;