12. SQL—设计和使用触发机制

1. 设计和使用触发机制

触发机制从本质上来说是一种特殊类型的存储过程,它可以在下列三种情况之一发生时自动运行:

  1. 更新
  2. 插入
  3. 删除

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. 触发机制与事务处理

触发机制所进行的活动是被默认为事务处理的一部分进行的,主要的事件次序如下:

  1. 默认地自动运行 BEGIN TRANSACTION 语句(对于表和触发机制而言)。
  2. 当插入、更新、删除操作发生时。
  3. 触发机制被调用,其中的语句被自动执行。
  4. 由触发机制自动的完成事务处理的取消或确认操作。
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 的特点
  • 提高运行时的速度
  • 经过了编译错误检查
  • 灵活性差
  • 需要更多的代码(因为查询不能在运行时进行变更)
  • 它对于其他的数据库系统来说使用不方便
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值