12. SQL—设计和使用触发机制
Posted 江湖@小小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12. SQL—设计和使用触发机制相关的知识,希望对你有一定的参考价值。
1. 设计和使用触发机制
触发机制从本质上来说是一种特殊类型的存储过程,它可以在下列三种情况之一发生时自动运行:
- 更新
- 插入
- 删除
1. Transcat-SQL 创建触发机制的语法格式如下:
create trigger trigger_name
on table_name
for {insert, update, delete}
as SQL_Statements
2. ORACLE 7 SQL 则使用下边的语法来创建触发机制:
CREATE [OR REPLACE] TRIGGER [schema.]trigger_name
{BEFORE | AFTER}
{DELETE | INSERT | UPDATE [OF column[, column]...]}
[OR {DELETE | INSERT | UPDATE [OF column [, column] ...]}]...
ON [schema.]table
[[REFERENCING { OLD [AS] old [NEW [AS] new]
| NEW [AS] new [OLD [AS] old]}]
FOR EACH ROW
[WHEN (condition)]]
pl/sql statements...
2. 触发机制与事务处理
触发机制所进行的活动是被默认为事务处理的一部分进行的,主要的事件次序如下:
- 默认地自动运行 BEGIN TRANSACTION 语句(对于表和触发机制而言)。
- 当插入、更新、删除操作发生时。
- 触发机制被调用,其中的语句被自动执行。
- 由触发机制自动的完成事务处理的取消或确认操作。
3. 使用触发机制时的限制
当你在时候使用触发机制时,你必须要知道它有如下的使用规则:
- 不能在临时表中创建机制。
- 触发机制必须在当前表所在的数据库中创建。
- 不能在视图中创建触发机制。
- 当表被删除以后,所有与之相关的触发机制会被自动地删除。
4. 在选择语句中使用更新和删除
UPPDATE
EMPLOYEE_TBL
SET
LAST_NAME = 'SMITH'
WHERE EXISTS
(
SELECT
EMPLOYEE_ID
FROM
PAYROLL_TBL
WHERE
EMPLOYEE_ID = 2
);
UPDATE
EMPLOYEE_TABLE
SET
HOURLY_PAY = 'HOURLY_PAY' * 1.1
WHERE
EMPLOYEE_ID =
(
SELECT
EMPLOYEE_ID
FROM
PAYROLL_TBL
WHERE
EMPLOYEE_ID = '222222222'
);
DELETE FROM
EMPLOYEE_TBL
WHERE
EMPLOYEE_ID =
(
SELECT
EMPLOYEE_ID
FROM
PAYROLL_TBL
WHERE
EMPLOYEE_ID = '222222222'
);
5. 静态 SQL 的特点
- 提高运行时的速度
- 经过了编译错误检查
- 灵活性差
- 需要更多的代码(因为查询不能在运行时进行变更)
- 它对于其他的数据库系统来说使用不方便
以上是关于12. SQL—设计和使用触发机制的主要内容,如果未能解决你的问题,请参考以下文章