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

Posted 江湖@小小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 的特点

  • 提高运行时的速度
  • 经过了编译错误检查
  • 灵活性差
  • 需要更多的代码(因为查询不能在运行时进行变更)
  • 它对于其他的数据库系统来说使用不方便

以上是关于12. SQL—设计和使用触发机制的主要内容,如果未能解决你的问题,请参考以下文章

你知道的Go切片扩容机制可能是错的

MySql触发器使用

MySQL触发器

使用触发器对学生表操作进行日志记录

如何防止片段在活动重新创建时触发 onCreate onCreateView

sqlserver 2005 触发器,的小问题