在sql触发器一种与数据库交互的直观方式

SQL已经变得非常流行,是一种普遍接受的数据库语言,用于与关系数据库通信。每个企业都有数据,并需要组织方法或数据管理流程来维护数据。所以重要的是学习和理解SQL以及数据结构如何用于在组织中存储信息。SQL是用来将您的需求传达给数据库的语言。您可以学习这一种语言,只需稍加调整,就可以将其应用于各种数据库平台、应用程序和产品。您可以从数据库中请求特定的信息用SQL编写查询。一个触发是在数据库表的结构发生更改时执行的查询。

SQL中的触发器是什么?

触发器是由DBMS存储和管理的事件驱动的专用过程。触发器是一种特殊形式的存储SQL过程,它在发生插入、删除或更新等事件时启动一个操作,或者触发一个操作。触发器还可以在其内部包含插入、更新和删除逻辑,因此,当触发器因数据修改而触发时,它还可能导致另一个数据修改,从而触发另一个触发器。内部包含数据修改逻辑的触发器称为嵌套触发器。

触发器是存储过程吗?

触发器在许多方面与存储过程相似,因为它们都使用存储在数据库级别的过程逻辑。触发器通常被称为“特殊类型的存储过程”。但与触发器不同,存储过程不是事件驱动的,也不附加到特定的表。每个触发器都附加到数据库中单个指定的表上,只有在发生插入、更新或删除事件时才会触发。触发器不能被调用或执行,但是DBMS在关联表中的数据修改后自动触发触发器。在创建触发器时,您必须指定将触发触发器的修改操作。

以下是允许的触发事件:

INSERT:当有新的行插入到表中时,触发器就会被激活;例如,通过INSERT、LOAD数据和REPLACE语句。

更新:当一行被修改时,触发器被激活;例如,通过UPDATE语句。

•DELETE:当从表中删除一行时,触发器被激活;例如,通过DELETE和REPLACE语句。

触发器主要用于开发人员执行业务规则和执行任务,比如将数据插入任何审计日志。它用于执行插入、更新或删除事件的结果的特定操作。

创建触发器并使用触发器

以下是创建和修改触发器所需的基本步骤:

  1. 单击并展开要向其中添加触发器的表的节点。
  2. 现在右键点击' Trigger '节点并选择' New Trigger '。
  3. 一个新的查询窗口将打开,并在这里输入新触发器的查询。
  4. 执行“创建触发器。”
  5. 新创建的触发器现在将出现在与该表关联的触发器的lsit下。

基本语法

触发器的语法是:

CREATE TRIGGER Trigger_Name On Table_Name For [INSERT], [UPDATE], [DELETE] AS ......触发器代码

展开触发器语句格式

下面的语句创建一个新的触发器。触发器与名为tbl_name的表相关联,该表必须是一个永久表。

CREATE [DEFINER = {user}] TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_body

语法解释:

trigger_time:{在|之前在|之后}

trigger_event: {INSERT | UPDATE | DELETE}

一个模式中的所有触发器必须具有唯一的名称,但是不同模式中的触发器可以具有相同的名称。

DEFINER子句确定激活触发器时用户的检查访问权限。

trigger_time是触发器动作时间。“之前”或“之后”可用于指示触发器在要修改的每一行之前或之后激活。

trigger_event表示激活触发器的操作类型。

触发器语句的示例

示例1

下面给出的触发器示例检查用户试图删除的产品是否已停止。如果产品停止运行,则删除过程将停止,并出现错误消息。

在dbo上创建触发器Deleterec。SELECT @ disconnected = stopped FROM deleted If @ disconnected = 0 BEGIN ROLLBACK TRAN RAISERROR (' Active product cannot be deleted ', 16,10)结束

示例2

当用户更新Products表中的数据时,将数据插入审计日志:

在dbo上创建触发器InsertProductAudit。SELECT @ProductID = ProductID, @Productname = Productname from INSERT into ProductsAudit VALUES (@ producttid, @Productname)

示例3

CREATE TABLE Source (Source_ID int IDENTITY, Source_Desc varchar(10)) go TRIGGER Source_INSERT ON Source FOR INSERT AS PRINT GETDATE() go INSERT Source (Source_Desc) VALUES ('Test 1')

上述触发器代码的输出:

——2001年4月28日上午9:56——

为什么有些程序员避免使用触发器?

许多数据库开发人员或程序员完全避免触发。触发器最大的缺点是,触发器隐藏在数据库中,当它们作为节点出现在与它们关联的表下面时,很难调试和排除故障。触发器也会减慢数据库操作。它们还会带来不便,因为它们通常会锁定数据很长一段时间。这就是为什么大多数开发人员选择使用存储过程函数而不是触发器。

结论

要了解更多关于存储过程函数的信息,并更好地理解其他SQL查询和代码,请浏览以下内容SQL查询101。等课程SQL Server要领:你应该知道的!从初学者到中级的实际SQL技能还将帮助你学习关键的SQL技能,以促进你的职业生涯。

SQL顶级课程

SQL和PostgreSQL:完整的开发人员指南
Stephen主梁
4.7 (1182)
评价最高
完整的SQL训练营2021:从零到英雄
何塞Portilla
4.7 (95612)
畅销书
终极MySQL训练营:从SQL初学者到专家
柯尔特·斯蒂尔,伊恩·斯库诺弗
4.6 (52420)
畅销书
SQL - MySQL数据分析和商业智能
365年职业生涯
4.6 (26599)
畅销书
高级SQL: SQL专家认证预备课程
甲骨文大师培训•全球8万多名学员,代码之星学院
4.3 (1977)
畅销书
完成SQL和数据库训练:从零到精通[2021]
Andrei Neagoie, Mo Binni
4.7 (1282)
SQL初学者:使用MySQL和数据库设计学习SQL
Tim Buchalka's Learn Programming Academy, Jon Avis - SQL讲师
4.5 (8633)
SQL & PostgreSQL初学者:成为SQL专家
Jon Avis - SQL讲师
4.5 (3062)
畅销书
应用SQL数据分析/数据科学与BigQuery
杰夫•詹姆斯
4.9 (15)
评价最高

多个SQL课程

SQL学生也学习

让你的团队。领导行业。

通过Udemy for Business为您的组织订阅在线课程图书馆和数字学习工具。

请求一个演示