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;