SQL 触发器

SQL 触发器

在本文中,您将学习有关触发器及其实现的例子。

结构化查询语言(SQL)中的触发器是一组过程语句,在特定表中的某些事件有响应时自动执行。触发器用于保护数据库中的数据完整性。

在SQL中,这个概念与现实生活中的触发器是相同的。例如,当我们扣动枪扳机时,子弹就会发射出去。

为了理解SQL中的触发器概念,让我们来看下面的假设情况:

假设Rishabh是一家跨国公司的人力资源经理。当新员工的记录输入到数据库中时,他必须向每位新员工发送“恭喜”消息。如果只有四五个员工,Rishabh可以手动完成,但如果新员工的数量超过一千人,那么在这种情况下,他必须在数据库中使用触发器。

因此,现在Rishabh必须在表中创建触发器,一旦将新员工的记录插入到数据库中,触发器将自动发送“恭喜”消息给新员工。

触发器始终与数据库中的特定表一起执行。如果我们删除表,则与该表关联的所有触发器也会自动删除。

在结构化查询语言中,触发器仅在以下事件之前或之后被调用:

  1. 插入事件: 当在表中插入新行时触发该事件。
  2. 更新事件: 当在表中修改现有记录时触发该事件。
  3. 删除事件: 当从表中删除现有记录时触发该事件。

SQL中的触发器类型

SQL中有六种触发器类型:

  1. AFTER INSERT触发器 在表中插入数据后调用该触发器。
  2. AFTER UPDATE触发器 在表中修改数据后调用该触发器。
  3. AFTER DELETE触发器 在从表中删除数据后调用该触发器。
  4. BEFORE INSERT触发器 在将记录插入到表中之前调用该触发器。
  5. BEFORE UPDATE触发器 在更新表中的记录之前调用该触发器。
  6. BEFORE DELETE触发器 在从表中删除记录之前调用该触发器。

SQL中触发器的语法

CREATE TRIGGER Trigger_Name
[ BEFORE | AFTER ]  [ Insert | Update | Delete]
ON [Table_Name]
[ FOR EACH ROW | FOR EACH COLUMN ]
AS
Set of SQL Statement

在触发器语法中,首先,在CREATE TRIGGER关键字之后我们必须定义触发器的名称。之后,我们必须使用BEFORE或AFTER关键字定义任何一个事件。

然后,我们定义触发器要发生的那个表的名称。

在表名之后,我们必须定义行级或语句级的触发器。

最后,我们必须编写在事件发生时执行的SQL语句。

SQL中触发器的示例

为了理解SQL中触发器的概念,首先我们必须在触发器要执行的表上创建表。

下面的查询在SQL数据库中创建了 Student_Trigger 表:

CREATE TABLE Student_Trigger
(
Student_RollNo INT NOT NULL PRIMARY KEY,
Student_FirstName Varchar (100),
Student_EnglishMarks INT,
Student_PhysicsMarks INT, 
Student_ChemistryMarks INT,
Student_MathsMarks INT,
Student_TotalMarks INT,
Student_Percentage  );

以下查询显示了 Student_Trigger 表的结构:

DESC Student_Trigger;

输出:

Field Type NULL Key Default Extra
Student_RollNo INT NO PRI NULL
Student_FirstName Varchar(100) YES NULL
Student_EnglishMarks INT YES NULL
Student_PhysicsMarks INT YES NULL
Student_ChemistryMarks INT YES NULL
Student_MathsMarks INT YES NULL
Student_TotalMarks INT YES NULL
Student_Percentage INT YES NULL

下面的查询在向表中插入学生记录之前触发触发器:

CREATE TRIGGER Student_Table_Marks
BEFORE INSERT
ON
Student_Trigger
FOR EACH ROW
SET new.Student_TotalMarks = new.Student_EnglishMarks + new.Student_PhysicsMarks + new.Student_ChemistryMarks + new.Student_MathsMarks, 
new.Student_Percentage = ( new.Student_TotalMarks / 400) * 100;

以下查询将记录插入到Student_Trigger表中:

INSERT INTO Student_Trigger (Student_RollNo, Student_FirstName, Student_EnglishMarks, Student_PhysicsMarks, Student_ChemistryMarks, Student_MathsMarks, Student_TotalMarks, Student_Percentage) VALUES ( 201, Sorya, 88, 75, 69, 92, 0, 0);

要检查上述INSERT语句的输出,您需要键入以下SELECT语句:

SELECT * FROM Student_Trigger;

输出:

Student_RollNo Student_FirstName Student_EnglishMarks Student_PhysicsMarks Student_chemistryMarks Student_MathsMarks Student_TotalMarks Student_Percentage
201 Sorya 88 75 69 92 324 81

SQL触发器的优点

以下是结构化查询语言中触发器的三个主要优点:

  1. SQL为在表中维护数据和引用完整性提供了一种替代方法。
  2. 触发器帮助执行计划任务,因为它们会自动调用。
  3. 它们可以捕捉各种企业数据库层的错误。
  4. 它们允许数据库用户在插入和更新之前验证值。

SQL触发器的缺点

以下是结构化查询语言中触发器的主要缺点:

  1. 它们没有编译。
  2. 无法找到和调试触发器中的错误。
  3. 如果在触发器中使用复杂代码,会导致应用程序运行变慢。
  4. 触发器会增加数据库系统的负载。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程