Advertisement

SQL触发器示例详解

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:PDF


简介:
本文章详细解析了SQL触发器的概念、用途及创建方法,并提供了丰富的实例帮助读者理解和应用触发器。 SQL触发器实例1 定义: 触发器是指在对某一个表进行特定操作(如Insert、Update或Delete)并满足一定条件的情况下,自动执行的一段程序代码。触发器是一种特殊的存储过程。常见的三种类型分别为应用于插入事件的触发器、更新事件的触发器以及删除事件的触发器。 为什么要使用触发器?举个例子:有两个表: 学生表(Student) 学生借书记录表(BorrowRecord) 创建这两个表的具体SQL语句如下: ```sql Create Table Student( -- 学生表 StudentID int primary key, --学号 ... ) Create Table BorrowRecord( -- 学生借书记录表 BorrowRecord int identity(1,1), -- 流水号 StudentID int, ```

全部评论 (0)

还没有任何评论哟~
客服
客服
  • SQL
    优质
    本文章详细解析了SQL触发器的概念、用途及创建方法,并提供了丰富的实例帮助读者理解和应用触发器。 SQL触发器实例1 定义: 触发器是指在对某一个表进行特定操作(如Insert、Update或Delete)并满足一定条件的情况下,自动执行的一段程序代码。触发器是一种特殊的存储过程。常见的三种类型分别为应用于插入事件的触发器、更新事件的触发器以及删除事件的触发器。 为什么要使用触发器?举个例子:有两个表: 学生表(Student) 学生借书记录表(BorrowRecord) 创建这两个表的具体SQL语句如下: ```sql Create Table Student( -- 学生表 StudentID int primary key, --学号 ... ) Create Table BorrowRecord( -- 学生借书记录表 BorrowRecord int identity(1,1), -- 流水号 StudentID int, ```
  • SQL Server
    优质
    本篇文章详细介绍了SQL Server触发器的概念、作用以及如何创建和使用触发器。通过具体示例,帮助读者掌握触发器的实际应用技巧。 Microsoft SQL Server 2000 提供了两种主要机制来强制业务规则和数据完整性:约束和触发器。触发器是一种特殊的存储过程,与之前介绍的普通存储过程有所不同。当对表进行插入、更新或删除操作时,触发器会自动被系统调用执行;而普通的存储过程则需要通过其名称手动调用。 什么是触发器? 触发器是在对某个表进行插入、更新或删除等操作时,由系统自动调用的特殊类型的存储过程。它通常用于实现比 check 约束更为复杂的业务规则和数据完整性要求。相较于普通存储过程,触发器的独特之处在于其执行是由特定的操作(如 update、insert 或 delete)引发的,并且不需要显式地通过名称来调用它们。在 SQL Server 2005 中,这种机制得到了进一步的发展和完善。
  • SQL
    优质
    本文章详细介绍了SQL触发器的概念,并通过多个实例演示了如何创建和使用触发器来自动响应数据库中的特定事件。 触发器是指在SQL Server环境中对某个表进行特定操作并满足一定条件后自动执行的一段程序。它是一种特殊的存储过程。常见的触发器有三种:分别用于Insert(插入)、Update(更新)和Delete(删除)事件。
  • SQL Server
    优质
    本示例介绍如何在SQL Server中创建和使用触发器,通过实际案例展示其功能及应用场景,帮助理解数据库自动化维护。 触发器是一种特殊的存储过程,在SQL Server中不能被显式调用,而是在向表插入、更新或删除记录时自动激活。因此,它们可以用来实施复杂的完整性约束。 每当有数据更改操作发生(如INSERT, UPDATE, DELETE),SQL Server会自动生成两个临时表格:Inserted和Deleted。这两个表的结构与触发器作用的目标表一致,并且仅存在于内存中,在触发器执行完成后即被删除。其中,Deleted表存放由于DELETE或UPDATE语句而从表中移除的所有行;Inserted表则存储由INSERT或UPDATE操作添加到目标表中的所有新记录。 SQL Server 2000支持两种类型的触发器:INSTEAD OF和AFTER。前者替代执行引发它的T-SQL语句,可用于扩展视图的更新能力(除了表格之外)。后者在插入、更新或删除之后运行,并且可以在这些操作完成之前进行约束检查等操作。 如果INSERT, UPDATE 或 DELETE 语句违反了某种约束条件,则相应的After触发器将不会被执行。相反地,INSTEAD OF 触发器可以先于对数据的更改执行,在这种情况下它能够预先处理一些可能会导致错误的操作,并且可以在插入和删除之前进行必要的检查。 创建触发器的基本语法如下: ```sql CREATE TRIGGER trigger_name ON {table_name | view_name} {FOR|AFTER|INSTEAD OF} [INSERT, UPDATE, DELETE] AS sql_statement ``` 示例: 1. 在Orders表中建立一个After触发器,用于检查goods表中的货品状态。如果状态为正在整理(status=1),则阻止订单插入。 ```sql CREATE TRIGGER orderinsert ON orders AFTER INSERT AS IF (SELECT status FROM goods WHERE name = (SELECT goodsname FROM inserted)) = 1 BEGIN PRINT The goods are being processed. Order cannot be committed. ROLLBACK TRANSACTION END ``` 2. 在Orders表建立触发器,当添加新的订单时减少Goods表中的库存。 ```sql CREATE TRIGGER orderinsert1 ON orders AFTER INSERT AS UPDATE goods SET storage = storage - (SELECT quantity FROM inserted WHERE goods.name=goodsname) ``` 3. 在Goods表中创建删除触发器,实现级联删除功能。 ```sql CREATE TRIGGER goodsdelete ON goods AFTER DELETE AS DELETE from orders where goodsname in(SELECT name FROM deleted) ``` 4. 创建防止手动修改订单日期的更新触发器。 ```sql CREATE TRIGGER orderdateupdate ON orders AFTER UPDATE AS IF update(orderdate) BEGIN raiserror(Order date cannot be modified,10,1) ROLLBACK TRANSACTION END ``` 5. 在Orders表中创建一个插入触发器,确保添加到该表中的所有货品名称都已在Goods表中存在。 ```sql CREATE TRIGGER orderinsert3 ON orders AFTER INSERT AS IF (SELECT COUNT(*) FROM goods WHERE name = (SELECT goodsname FROM inserted))=0 BEGIN PRINT No entry in Goods for this Order ROLLBACK TRANSACTION END ``` 6. 在info_details表上创建触发器,用于同步插入、更新和删除操作到索引表中。 ```sql -- 插入触发器示例 CREATE TRIGGER tri_infoDetails_i ON info_details AFTER INSERT AS DECLARE @id INT BEGIN SELECT @id=id FROM inserted; INSERT INTO info_details_index(TYPE, TITLE, content, POST_TIME, FLAG) SELECT type,title,content,getdate(),1 FROM info_details WHERE id=@id END -- 更新触发器示例 CREATE TRIGGER tri_infoDetails_u ON info_details AFTER UPDATE AS DECLARE @id INT BEGIN IF EXISTS(SELECT 1 FROM inserted) AND EXISTS (SELECT 1 FROM deleted) BEGIN SELECT @id=id FROM inserted; INSERT INTO info_details_index(TYPE, TITLE,content, POST_TIME, FLAG) SELECT type,title,content,getdate(),-1 FROM info_details WHERE id=@id; INSERT INTO info_details_index(TYPE,TITLE,content,POST_TIME,FLAG) SELECT type,title,content,getdate(),1 FROM info_details WHERE id=@id END END -- 删除触发器示例 CREATE TRIGGER tri_infoDetails_d ON info_details AFTER DELETE AS DECLARE @id INT BEGIN IF EXISTS(SELECT 1 FROM deleted) BEGIN INSERT INTO info_details_index(TYPE,TITLE,POST_TIME,FLAG) SELECT type,title,getdate(),-1 FROM deleted WHERE id=@id; END END; ```
  • SQL析与代码
    优质
    本文章深入浅出地讲解了SQL触发器的概念、作用以及如何在数据库中创建和使用触发器。通过具体实例演示了触发器的应用场景及编写技巧,并提供了实用的代码示例,帮助读者快速掌握这一重要技术。 ### 触发器的作用 触发器是SQL数据库中的特殊存储过程,在特定的数据操作(如INSERT、UPDATE、DELETE)发生时自动执行。它们的主要目的是监控和控制对数据库表的更改,确保数据的一致性、完整性和业务规则的遵守。通过使用触发器,开发人员可以实现审计跟踪、数据验证以及参照完整性检查等功能。 ### 创建触发器 创建触发器的基本语法如下: ```sql CREATE TRIGGER [触发器名] [触发时机] [触发事件] ON [要监控的表名] FOR EACH ROW BEGIN [要执行的语句] END ``` 其中,`BEFORE`和`AFTER`决定了在指定操作之前或之后何时激活触发器。例如: ```sql CREATE TRIGGER tri_test AFTER INSERT ON prot_subscribe FOR EACH ROW BEGIN INSERT INTO prot_log(mobile, id) VALUES (NEW.mobile, NEW.product_id); END; ``` ### 查看触发器 查看数据库中的触发器有以下两种方法: 1. 使用`SHOW TRIGGERS`命令: ```sql SHOW TRIGGERS FROM [数据库名]; 或者 SHOW TRIGGERS; ``` 2. 查询`INFORMATION_SCHEMA.TRIGGERS`表: ```sql SELECT * FROM INFORMATION_SCHEMA.TRIGGERS; ``` ### 删除触发器 删除触发器使用以下语法: ```sql DROP TRIGGER [IF EXISTS] [触发器名]; ``` 例如,要删除名为tri_sub_one的触发器,请运行命令如下所示: ```sql DROP TRIGGER IF EXISTS tri_sub_one; ``` ### 使用限制 1. 每个表上只能有一个相同类型的触发器。因此每个表最多可创建6个触发器。 2. 在INSERT和UPDATE操作中,`NEW`关键字代表将要插入或已更新的新数据;而在DELETE操作中,`OLD`关键字表示旧数据。在触发器内部可以使用`NEW`进行赋值以避免循环调用,而`OLD`则是只读的。 3. MySQL中的DELIMITER命令用于临时改变SQL语句结束符为$$或其他字符,并且可以在创建完成后恢复默认分号。 总的来说,SQL触发器是数据库管理的重要工具。它们提供了在数据修改前后执行逻辑的能力,有助于确保数据准确性和业务规则遵守。
  • SQL的应用
    优质
    本篇文章将通过具体实例介绍如何在数据库中使用SQL触发器来自动执行特定任务,以提高数据操作效率和准确性。 SQL触发器使用实例--创建触发器 示例1:创建名为[T_INSERT_卷烟库存表]的触发器。这个触发器较简单。当[卷烟库存表]发生INSERT动作时,该触发器被引发。 功能描述: 强制执行业务规则,确保插入的数据中,库存金额等于库存数量乘以库存单价。 注意点: - [INSERTED]和[DELETED]为系统表,不可创建、修改或删除。但可以调用它们。 - 这两个系统表的结构与插入数据的表相同。 代码实现: ```sql IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = TR AND NAME = T_INSERT_卷烟库存表) DROP TRIGGER T_INSERT_卷烟库存表 GO CREATE TRIGGER T_INSERT_卷烟库存表 ON 卷烟库存表 FOR INSERT AS BEGIN TRANSACTION -- 开始事务处理 UPDATE 卷烟库存表 SET 库存金额 = 库存数量 * 库存单价 WHERE 卷烟品牌 IN (SELECT 卷烟品牌 FROM INSERTED) COMMIT TRANSACTION -- 提交事务处理 GO ``` 以上是创建触发器[T_INSERT_卷烟库存表]的完整示例。
  • MySQL的操作:增删改查
    优质
    本文章详细介绍了如何在MySQL中使用触发器进行数据库操作,包括增加、删除、修改和查询等常用功能,并提供了具体示例。 主要介绍了MySQL触发器的增删改查操作,并结合实例分析了如何定义及使用触发器进行相关数据库操作技巧,需要的朋友可以参考一下。
  • MySQL的操作:增删改查
    优质
    本篇文章详细介绍了在MySQL数据库中使用触发器进行数据操作的方法与技巧,包括新增、删除、修改和查询等常用功能,并提供了实用的操作示例。 本段落介绍了MySQL触发器的增删改查操作。创建触发器后,可以在包含触发器定义文件的数据文件夹中查看其定义。这些触发器作为纯文本段落件存储在以下路径:/data_folder/database_name/table_name.trg此外,我们可以通过查询information_schema数据库中的triggers表来显示触发器信息: ```sql SELECT * FROM information_schema.triggers WHERE trigger_schema = database_name AND TRIGGER_NAME = trigger_name; ``` 这样可以方便地管理和查看已创建的触发器。
  • 74LS112
    优质
    本文章详细解析了74LS112双D型触发器的功能、引脚图和应用方法。通过阅读可以掌握其工作原理及具体操作技巧。 本段落介绍了74LS112型双JK触发器芯片的引脚图和管脚图,并提供了中文资料和pdf文件下载。该触发器具有双稳态功能,可以实现数据存储和时序控制等功能,在数字电路和计算机系统中得到广泛应用。
  • MySQL
    优质
    本教程提供了一系列针对MySQL数据库中使用触发器的实际示例。通过这些例子,读者可以学习如何创建、修改和删除触发器以增强数据库操作的自动化和管理效率。 包含MySQL触发器(trigger)的实例代码,稍作修改即可使用。