SQL
INSERT
一次创建一行。
INSERT
INTO
employees
VALUES
(
9999
,
'Bob'
,
'Builder'
,
'[email protected]'
,
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;