SQL触发器

时间:2020-02-23 14:32:36  来源:igfitidea点击:

在本文中,我们将重点关注SQL触发器。

什么是SQL触发器?

" SQL触发器"是存储过程/函数,在遇到数据库中的某些操作时执行。

触发器可以被视为一段代码或者一个函数,该函数或者函数可以在数据库值中发生某些事件时触发或者执行。

需要SQL触发器

让我们借助示例了解SQL触发器的需求。

考虑学校/学院的管理。
通常,每当老师安排任何形式的家长教师见面时,他们都会从数据库中发送一封电子邮件到家长的注册电子邮件地址。
向所有候选人发送邀请电子邮件是一个繁琐的过程。

现在,如果我们将整个过程替换为Triggers,也就是说,我们编写了一个存储过程,则它将在某个特定事件发生时在数据库中新记录的条目上发送邮件。

这样可以节省大量时间,并导致代码的可重用性。

SQL触发器的语法

如上所述,SQL触发器是一系列事件,这些事件根据所提到的预定义动作导致确定的输出值。

Create Trigger Trigger-Name
(Before | After)  [ Insert | Update | Delete]
on [Table_Name]
[ for each row | for each column ]
[Trigger-body ]

  • Create Trigger:该语句为要在特定时间间隔触发的动作创建一个触发器。

  • Before:如果我们在源代码中提到了" before",则触发器将执行自身并更新值,然后再执行指定的DML操作。

  • "之后":如果我们在源代码中提到了"之前",则触发器将执行自身并在执行指定的DML操作后更新值。

  • [插入|更新|删除]:这些是可以与触发器一起使用的DML操作。

  • [每行|对于每一列]:触发器可以按行或者按列执行。

  • Trigger-body:在该块中提到触发器要执行的代码。

通过示例实现SQL触发器

了解了SQL触发器的工作原理和语法后,现在让我们逐步研究一下SQL触发器的实现。

最初,我们使用SQL Create查询创建一个SQL表,其列如下所示:

  • item_id
  • Price(per item)
  • Quantity(per item)
  • Total_Cost
create table Info(item_id integer, Price integer, Quantity integer, Total_Cost integer);

现在,我们为表创建一个SQL触发器-上面创建的"信息"。

CREATE TRIGGER Get_value
Before INSERT
ON Info
FOR EACH ROW
SET new.Total_Cost = new.Price*new.Quantity;

我们已在插入触发器之前创建了一个触发器" Get_value",即该触发器将执行自身并在将数据保存到数据库之前更新数据值。

创建触发器后,我们执行DML-INSERT操作以将数据插入表中。

注意:由于我们要计算Total_Cost,因此在执行INSERT查询时已在其位置输入了零。

插入记录后,触发器将执行其主体。
并用其计算值替换Total_cst列的零。

insert into Info(item_id, Price,Quantity,Total_Cost) values(1, 150,30,0);
insert into Info(item_id, Price,Quantity,Total_Cost) values(2, 100,23,0);
insert into Info(item_id, Price,Quantity,Total_Cost) values(3, 250,5,0);

最后,我们使用SQL SELECT命令显示更新的数据值。

select * from Info;

SQL触发器的优点

  • SQL触发器可以轻松识别数据库中所做的更改。

  • 它维护数据的完整性。

SQL触发器的局限性

触发器的最重要也是唯一的缺点是故障排除问题。

触发器在数据库中自动执行,这使故障排除和解决变得困难。