SQL触发器
在本文中,我们将重点关注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触发器的局限性
触发器的最重要也是唯一的缺点是故障排除问题。
触发器在数据库中自动执行,这使故障排除和解决变得困难。