如何使用Python实现定时任务和周期性任务?照明定时控制方式实例

2024-01-26 20:40:06 15

如何使用Python实现定时任务和周期性任务?照明定时控制方式实例

大家好,触发器实例相信很多的网友都不是很明白,包括如何使用Python实现定时任务和周期性任务也是一样,不过没有关系,接下来就来为大家分享关于触发器实例和如何使用Python实现定时任务和周期性任务的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

如何使用Python实现定时任务和周期性任务

在我们的应用场景中,经常用到一些定时任务,在Python中有这样的一个模块,它是基于Quartz的一个Python定时任务框架 APScheduler,实现了Quartz的全部功能,使用起来十分简单、高效。其提供了基于日期、固定时间间隔以及Crontab类型的任务,并且支持持久化任务。同时也提供了不同的存储机制,可以方便与数据库等第三方的外部持久化机制进行协同工作。它主要包含了四种组件:

  • Triggers:任务触发器,任务以何种方式触发。
  • Job stores:任务存储器,持久存储任务。
  • Executors:任务执行器,执行任务的模块。
  • Schedulers:任务调度器,通过配置trigger、job store、executor等实现对任务的增删改查等调度控制。

apscheduler 安装

pip install apscheduler

循环周期性任务

使用 interval 触发器,实现按照时间间隔执行任务,比如,我们需要程序每隔2秒中执行一次任务,代码示例如下:

代码执行效果如下:


定时任务

使用 cron触发器,实现在指定时间点执行任务。比如, 我们需要程序在2、4月,7-9月,每天晚上22点21分执行一次任务,代码示例如下:

代码执行效果如下:

照明定时控制方式实例

利用光敏器件阻抗随光照强度的变化而变化的特点去控制电信号的强弱,再由传感器将变化的电信号传递给触发器,只要电信号强度达到一定程度,将触发触发器,使其导通工作

怎么用SQL server 2000 和VB 做一个存储过程和触发器的例子

1. 和特定表或视图关联。触发器定义在特定的表或视图上,称为触发器表或触发器视图2. 自动调用。当试图在某个表插入、更新或删除数据,而在那个表上定义了针对所做动作的触发器,那么触发器会自动执行3. 不能被直接调用。不像普通的存储过程,触发器不能被直接调用,也不传递或接受参数4. 是一个事务的部分。触发器及触发它的语句被视为单个事务,可以在触发器内的任何地方被回滚二、创建触发器创建触发器,触发器是一种特殊的存储过程,在用户试图对指定的表执行指定的数据修改语句时自动执行。Microsoft�0�3 SQL Server�6�4 允许为任何给定的 INSERT、UPDATE 或 DELETE 语句创建多个触发器。1.语法CREATE TRIGGER trigger_name ON { table | view } }是指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。必须至少指定一个选项。在触发器定义中允许使用以任意顺序组合的这些关键字。如果指定的选项多于一个,需用逗号分隔这些选项。对于 INSTEAD OF 触发器,不允许在具有 ON DELETE 级联操作引用关系的表上使用 DELETE 选项。同样,也不允许在具有 ON UPDATE 级联操作引用关系的表上使用 UPDATE 选项。AS是触发器要执行的操作。sql_statement是触发器的条件和操作。触发器条件指定其它准则,以确定 DELETE、INSERT 或 UPDATE 语句是否导致执行触发器操作。3.注意事项:SQL Server 不允许在触发器中使用下列语句: ALTER DATABASE、CREATE DATABASE、DROP DATABASE、LOAD DATABASE、LOAD LOG、RESTORE DATABASE、RESTORE LOG三、触发器实例1.简单的触发器,几种触发器的比较.CREATE TRIGGER TRIG1 ON 图书FOR DELETEAS PRINT ’触发器已执行!’ 2.在“租借信息表”上创建 INSERT触发器“借阅册数”,如果“允借册数”为0,就不能再借了。CREATE TRIGGER 借阅册数 ON 借阅AFTER INSERTASIF (SELECT 允借册数 FROM 读者,inserted WHERE 读者.借书证号=inserted.借书证号)=0BEGIN PRINT ’你可借书的册数为0,不能再借图书了’ ROLLBACK TRANSACTIONEND3.在“租借信息”表上创建 INSERT触发器“借书期限”,如果学生借书时间超过30天则不能借书。CREATE TRIGGER 借书期限 ON 租借信息 AFTER INSERTAS IF EXISTS(SELECT * FROM 租借信息,inserted WHERE 租借信息.借书证号=inserted.借书证号 AND (GETDATE())-租借信息.借书日期)》30 AND 租借信息.还书日期 IS NULL)BEGIN PRINT ’你有超期未还的图书,不能再借图书了!’ ROLLBACK TRANSACTIONEND存储过程的应用举例 例1 创建一个“借书过程”存储过程,该存储过程实现的功能是帮助读者完成借书过程。即读者只要提供借书证号、图书名称和图书的作者,就能完成借书。该程序完成的具体操作是:根据读者所提供的图书名称和作者,在图书信息表中进行查询,如果该书未被借出则继续完成借书操作,否则提示读者图书已经惜出。借书操作主要包括三个操作:向“租借信息”表中插入一条记录(保存该读者的借书信息),将“图书信息”表中对应记录的状态列设为1(避免他人再惜),将“学生信息”表中对应记录的借书册数增1(统计该读者的借书册数)。这三个操作要么都执行,要么都不执行。USE 图书借阅管理GOCREATE PROC 借书过程 @借书证号 char(5),@图书名称 varchar(40),@作者 varchar(20) AS DECLARE @借阅号 int,@图书编号 varchar(6) IF EXISTS (SELECT * FROM 图书信息 WHERE 图书名称=@图书名称 and 作者=@作者 and 状态=0) BEGIN BEGIN TRAN SELECT @图书编号=图书编号 FROM 图书信息 --取出图书所对应的图书编号 WHERE 图书名称=@图书名称 and 作者=@作者 and 状态=0 UPDATE 图书信息 SET 状态=1 WHERE 图书编号=@图书编号 --修改"状态"列的值 IF @@error!=0 BEGIN ROLLBACK TRAN PRINT ’更新图书信息表失败。’ RETURN 1 END SELECT @借阅号=借阅号 FROM 租借信息 ORDER BY 借阅号 --取出最大借阅号 IF @借阅号 is null SET @借阅号=0 INSERT 租借信息(借阅号,借书证号,图书编号,借书日期) VALUES (@借阅号+1,@借书证号,@图书编号,getdate()) IF @@error!=0 BEGIN ROLLBACK TRAN PRINT ’借书失败。’ RETURN 3 END UPDATE 学生信息 SET 借书册数=借书册数+1 --修改该读者的借书册数 WHERE 借书证号=@借书证号 IF @@error!=0 BEGIN ROLLBACK TRAN PRINT ’更新学生信息失败。’ RETURN 4 END COMMIT TRAN PRINT ’恭喜您借书成功!图书编号是:’+@图书编号 RETURN 0 END ELSE BEGIN PRINT ’图书已经借出或没有。’ RETURN 2 END 执行”借书过程’USE 图书借阅管理GOEXEC 借书过程 ’00006’,’大学英语(2)’,’李慧琴’ 例2 编写“还书”存储过程,要求通过学生的“借书证号”和“图书编号”来完成还书过程。 还书操作:修改“租借信息”表中的“还书日期”,相应地将“图书信息”表中对应记录的“状态”列的值修改为0,“学生信息”表中“借书册数”减1。 CREATE PROC 还书 @借书证号varchar(5),@图书编号 varchar(6),@借书日期 datetime=null AS BEGIN TRAN IF @还书日期 IS NOT NULL UPDATE 租借信息SET 还书日期=@还书日期 WHERE 图书编号=@图书编号 AND 借书证号=@借书证号 ELSE UPDATE 租借信息SET还书日期=getdate() WHERE 图书编号=@图书编号 AND 借书证号=@借书证号 IF @@ERROR!=0 OR @@ROWCOUNT=0 BEGIN ROLLBACK TRAN PRINT ‘还书失败。’ RETURN 1 END UPDATE 图书信息 SET 状态=0 WHERE图书编号=@图书编号 IF @@ERROR!=0 OR @@ROWCOUNT=0 BEGIN ROLLBACK TRAN PRINT ‘还书失败。’ RETURN 2 END UPDATE 学生信息 SET 借书册数=借书册数-1 WHERE 借书证号=@借书证号IF @@ERROR!=0 OR @@ROWCOUNT=0 BEGIN ROLLBACK TRAN PRINT ‘还书失败。’ RETURN 3 END COMMIT PRINT ‘恭喜你还书成功!

Sql触发器

SQL触发器实例定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。 常见的触发器有三种:分别应用于Insert , Update , Delete 事件。 我为什么要使用触发器?比如,这么两个表: Create Table Student( --学生表 StudentID int primary key, --学号 .... ) Create Table BorrowRecord( --学生借书记录表 BorrowRecord int identity(1,1), --流水号 StudentID int , --学号 BorrowDate datetime, --借出时间 ReturnDAte Datetime, --归还时间 ... ) 用到的功能有: 1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号); 2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。 等等。 这时候可以用到触发器。对于1,创建一个Update触发器: Create Trigger truStudent On Student --在Student表中创建触发器 for Update --为什么事件触发 As --事件触发后所要做的事情 if Update(StudentID) begin Update BorrowRecord Set StudentID=i.StudentID From BorrowRecord br , Deleted d ,Inserted i --Deleted和Inserted临时表 Where br.StudentID=d.StudentID end 理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。 一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是: 虚拟表Inserted 虚拟表Deleted 在表记录新增时 存放新增的记录 不存储记录 修改时 存放用来更新的新记录 存放更新前的记录 删除时 不存储记录 存放被删除的记录 一个Update 的过程可以看作为:生成新的记录到Inserted表,复制旧的记录到Deleted表,然后删除Student记录并写入新纪录。 对于2,创建一个Delete触发器 Create trigger trdStudent On Student for Delete As Delete BorrowRecord From BorrowRecord br , Delted d Where br.StudentID=d.StudentID 从这两个例子我们可以看到了触发器的关键:A.2个临时的表;B.触发机制。 SQL触发器实例2

请列举几种常用的触发器

SQL Server 有三种常规类型的触发器:DML 触发器、DDL 触发器和登录触发器。DML触发器,当数据库中表中的数据发生变化时,包括insert,update,delete任意操作,如果我们对该表写了对应的DML触发器,那么该触发器自动执行;DDL触发器,它是Sql Server2005新增的触发器,主要用于审核与规范对数据库中表,触发器,视图等结构上的操作;登录触发器,登录触发器将为响应 LOGIN 事件而激发存储过程。与 SQL Server 实例建立用户会话时将引发此事件。登录触发器将在登录的身份验证阶段完成之后且用户会话实际建立之前激发。

SQL中触发器有什么作用

触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。SQL3的触发器是一个能由系统自动执行对数据库修改的语句。 触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。 触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。 SQL Server 包括三种常规类型的触发器:DML 触发器、DDL 触发器和登录触发器。 语法为: CREATE TRIGGER `《databaseName》`.`《triggerName》` 《 》 ON 《tableName》 //dbo代表该表的所有者 FOR EACH ROW BEGIN --do something END 触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制比用CHECK约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。 约束和触发器在特殊情况下各有优势。触发器的主要好处在于它们可以包含使用 Transact-SQL 代码的复杂处理逻辑。因此,触发器可以支持约束的所有功能;但它在所给出的功能上并不总是最好的方法。实体完整性总应在最低级别上通过索引进行强制,这些索引或是 PRIMARY KEY 和 UNIQUE 约束的一部分,或是在约束之外独立创建的。假设功能可以满足应用程序的功能需求,域完整性应通过 CHECK 约束进行强制,而引用完整性(RI) 则应通过 FOREIGN KEY 约束进行强制。在约束所支持的功能无法满足应用程序的功能要求时,触发器就极为有用。 CHECK 约束只能根据逻辑表达式或同一表中的另一列来验证列值。如果应用程序要求根据另一个表中的列验证列值,则必须使用触发器。约束只能通过标准的系统错误信息传递错误信息。如果应用程序要求使用(或能从中获益)自定义信息和较为复杂的错误处理,则必须使用触发器。 触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以禁止或回滚违反引用完整性的更改,从而取消所尝试的数据修改。当更改外键且新值与主键不匹配时,此类触发器就可能发生作用。例如,可以在 titleauthor.title_id 上创建一个插入触发器,使它在新值与 titles.title_id 中的某个值不匹配时回滚一个插入。不过,通常使用 FOREIGN KEY 来达到这个目的。 如果触发器表上存在约束,则在 INSTEAD OF 触发器执行后但在 AFTER 触发器执行前检查这些约束。如果约束破坏,则回滚 INSTEAD OF 触发器操作并且不执行 AFTER 触发器。实例1:insert触发器create trigger tri_inserton studentfor insertasdeclare @student_id char(10)select @student_id=s.student_id fromstudent s inner join inserted ion s.student_id=i.student_idif @student_id=’0000000001’beginraiserror(’不能插入1的学号!’,16,8)rollback tranendgo实例2:update触发器create trigger tri_updateon studentfor updateasif update(student_id)beginraiserror(’学号不能修改!’,16,8)rollback tranendgo实例3:delete触发器示create trigger tri_deleteon studentfor deleteasdeclare @student_id varchar(10)select @student_id=student_id from deletedif @student_id=’admin’beginraiserror(’错误’,16,8)rollback tranend

SQl中触发器怎样执行的

CREATE TRIGGER创建触发器,触发器是一种特殊的存储过程,在用户试图对指定的表执行指定的数据修改语句时自动执行。Microsoft® SQL Server™ 允许为任何给定的 INSERT、UPDATE 或 DELETE 语句创建多个触发器。语法CREATE TRIGGER trigger_name ON { table | view } { { { FOR | AFTER | INSTEAD OF } { } AS sql_statement } } 参数trigger_name是触发器的名称。触发器名称必须符合标识符规则,并且在数据库中必须唯一。可以选择是否指定触发器所有者名称。Table | view是在其上执行触发器的表或视图,有时称为触发器表或触发器视图。可以选择是否指定表或视图的所有者名称。WITH ENCRYPTION加密 syscomments 表中包含 CREATE TRIGGER 语句文本的条目。使用 WITH ENCRYPTION 可防止将触发器作为 SQL Server 复制的一部分发布。AFTER指定触发器只有在触发 SQL 语句中指定的所有操作都已成功执行后才激发。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。如果仅指定 FOR 关键字,则 AFTER 是默认设置。不能在视图上定义 AFTER 触发器。INSTEAD OF指定执行触发器而不是执行触发 SQL 语句,从而替代触发语句的操作。在表或视图上,每个 INSERT、UPDATE 或 DELETE 语句最多可以定义一个 INSTEAD OF 触发器。然而,可以在每个具有 INSTEAD OF 触发器的视图上定义视图。INSTEAD OF 触发器不能在 WITH CHECK OPTION 的可更新视图上定义。如果向指定了 WITH CHECK OPTION 选项的可更新视图添加 INSTEAD OF 触发器,SQL Server 将产生一个错误。用户必须用 ALTER VIEW 删除该选项后才能定义 INSTEAD OF 触发器。{ }是指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。必须至少指定一个选项。在触发器定义中允许使用以任意顺序组合的这些关键字。如果指定的选项多于一个,需用逗号分隔这些选项。对于 INSTEAD OF 触发器,不允许在具有 ON DELETE 级联操作引用关系的表上使用 DELETE 选项。同样,也不允许在具有 ON UPDATE 级联操作引用关系的表上使用 UPDATE 选项。WITH APPEND指定应该添加现有类型的其它触发器。只有当兼容级别是 65 或更低时,才需要使用该可选子句。如果兼容级别是 70 或更高,则不必使用 WITH APPEND 子句添加现有类型的其它触发器(这是兼容级别设置为 70 或更高的 CREATE TRIGGER 的默认行为)。有关更多信息,请参见 sp_dbcmptlevel。WITH APPEND 不能与 INSTEAD OF 触发器一起使用,或者,如果显式声明 AFTER 触发器,也不能使用该子句。只有当出于向后兼容而指定 FOR 时(没有 INSTEAD OF 或 AFTER),才能使用 WITH APPEND。以后的版本将不支持 WITH APPEND 和 FOR(将被解释为 AFTER)。NOT FOR REPLICATION表示当复制进程更改触发器所涉及的表时,不应执行该触发器。AS是触发器要执行的操作。sql_statement是触发器的条件和操作。触发器条件指定其它准则,以确定 DELETE、INSERT 或 UPDATE 语句是否导致执行触发器操作。当尝试 DELETE、INSERT 或 UPDATE 操作时,Transact-SQL语句中指定的触发器操作将生效。触发器可以包含任意数量和种类的 Transact-SQL 语句。触发器旨在根据数据修改语句检查或更改数据;它不应将数据返回给用户。触发器中的 Transact-SQL 语句常常包含控制流语言。CREATE TRIGGER 语句中使用几个特殊的表: deleted 和 inserted 是逻辑(概念)表。这些表在结构上类似于定义触发器的表(也就是在其中尝试用户操作的表);这些表用于保存用户操作可能更改的行的旧值或新值。例如,若要检索 deleted 表中的所有值,请使用: SELECT *FROM deleted如果兼容级别等于 70,那么在 DELETE、INSERT 或 UPDATE 触发器中,SQL Server 将不允许引用 inserted 和 deleted 表中的 text、ntext 或 image 列。不能访问 inserted 和 deleted 表中的 text、ntext 和 image 值。若要在 INSERT 或 UPDATE 触发器中检索新值,请将 inserted 表与原始更新表联接。当兼容级别是 65 或更低时,对 inserted 或 deleted 表中允许空值的text、ntext 或 image 列,将返回空值;如果这些列不可为空,则返回零长度字符串。 当兼容级别是 80 或更高时,SQL Server 允许在表或视图上通过 INSTEAD OF 触发器更新 text、ntext 或 image 列。n是表示触发器中可以包含多条 Transact-SQL 语句的占位符。对于 IF UPDATE (column) 语句,可以通过重复 UPDATE (column) 子句包含多列。IF UPDATE (column)测试在指定的列上进行的 INSERT 或 UPDATE 操作,不能用于 DELETE 操作。可以指定多列。因为在 ON 子句中指定了表名,所以在 IF UPDATE 子句中的列名前不要包含表名。若要测试在多个列上进行的 INSERT 或 UPDATE 操作,请在第一个操作后指定单独的 UPDATE(column) 子句。在 INSERT 操作中 IF UPDATE 将返回 TRUE 值,因为这些列插入了显式值或隐性 (NULL) 值。说明 IF UPDATE (column) 子句的功能等同于 IF、IF...ELSE 或 WHILE 语句,并且可以使用 BEGIN...END 语句块。有关更多信息,请参见控制流语言。 可以在触发器主体中的任意位置使用 UPDATE (column)。column是要测试 INSERT 或 UPDATE 操作的列名。该列可以是 SQL Server 支持的任何数据类型。但是,计算列不能用于该环境中。有关更多信息,请参见数据类型。 IF (COLUMNS_UPDATED()) 测试是否插入或更新了提及的列,仅用于 INSERT 或 UPDATE 触发器中。COLUMNS_UPDATED 返回 varbinary 位模式,表示插入或更新了表中的哪些列。COLUMNS_UPDATED 函数以从左到右的顺序返回位,最左边的为最不重要的位。最左边的位表示表中的第一列;向右的下一位表示第二列,依此类推。如果在表上创建的触发器包含 8 列以上,则 COLUMNS_UPDATED 返回多个字节,最左边的为最不重要的字节。在 INSERT 操作中 COLUMNS_UPDATED 将对所有列返回 TRUE 值,因为这些列插入了显式值或隐性 (NULL) 值。可以在触发器主体中的任意位置使用 COLUMNS_UPDATED。bitwise_operator是用于比较运算的位运算符。updated_bitmask是整型位掩码,表示实际更新或插入的列。例如,表 t1 包含列 C1、C2、C3、C4 和 C5。假定表 t1 上有 UPDATE 触发器,若要检查列 C2、C3 和 C4 是否都有更新,指定值 14;若要检查是否只有列 C2 有更新,指定值 2。comparison_operator是比较运算符。使用等号 (=) 检查 updated_bitmask 中指定的所有列是否都实际进行了更新。使用大于号 (》) 检查 updated_bitmask 中指定的任一列或某些列是否已更新。column_bitmask是要检查的列的整型位掩码,用来检查是否已更新或插入了这些列。 注释触发器常常用于强制业务规则和数据完整性。SQL Server 通过表创建语句(ALTER TABLE 和 CREATE TABLE)提供声明引用完整性 (DRI);但是 DRI 不提供数据库间的引用完整性。若要强制引用完整性(有关表的主键和外键之间关系的规则),请使用主键和外键约束(ALTER TABLE 和 CREATE TABLE 的 PRIMARY KEY 和 FOREIGN KEY 关键字)。如果触发器表存在约束,则在 INSTEAD OF 触发器执行之后和 AFTER 触发器执行之前检查这些约束。如果违反了约束,则回滚 INSTEAD OF 触发器操作且不执行(激发)AFTER 触发器。可用 sp_settriggerorder 指定表上第一个和最后一个执行的 AFTER 触发器。在表上只能为每个 INSERT、UPDATE 和 DELETE 操作指定一个第一个执行和一个最后一个执行的 AFTER 触发器。如果同一表上还有其它 AFTER 触发器,则这些触发器将以随机顺序执行。如果 ALTER TRIGGER 语句更改了第一个或最后一个触发器,则将除去已修改触发器上设置的第一个或最后一个特性,而且必须用 sp_settriggerorder 重置排序值。只有当触发 SQL 语句(包括所有与更新或删除的对象关联的引用级联操作和约束检查)成功执行后,AFTER 触发器才会执行。AFTER 触发器检查触发语句的运行效果,以及所有由触发语句引起的 UPDATE 和 DELETE 引用级联操作的效果。

谁知道在SQL中什么是触发器,有什么作用

触发器是一种特殊类型的存储过程,不由用户直接调用。创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行。CREATE PROCEDURE 或 CREATE TRIGGER 语句不能跨越批处理。即存储过程或触发器始终只能在一个批处理中创建并编译到一个执行计划中。用触发器还可以强制执行业务规则Microsoft® SQL Server64 2000 提供了两种主要机制来强制业务规则和数据完整性:约束和触发器。触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效。唤醒调用触发器以响应 INSERT、UPDATE 或 DELETE 语句。触发器可以查询其它表,并可以包含复杂的 Transact-SQL 语句。将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果检测到严重错误(例如,磁盘空间不足),则整个事务即自动回滚。触发器的优点如下:触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制比用 CHECK 约束定义的约束更为复杂的约束。与CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。比较触发器与约束约束和触发器在特殊情况下各有优势。触发器的主要好处在于它们可以包含使用 Transact-SQL 代码的复杂处理逻辑。因此,触发器可以支持约束的所有功能;但它在所给出的功能上并不总是最好的方法。实体完整性总应在最低级别上通过索引进行强制,这些索引或是 PRIMARY KEY 和 UNIQUE 约束的一部分,或是在约束之外独立创建的。假设功能可以满足应用程序的功能需求,域完整性应通过 CHECK 约束进行强制,而引用完整性 (RI) 则应通过 FOREIGN KEY 约束进行强制。在约束所支持的功能无法满足应用程序的功能要求时,触发器就极为有用。例如:除非REFERENCES 子句定义了级联引用操作,否则 FOREIGN KEY 约束只能以与另一列中的值完全匹配的值来验证列值。CHECK 约束只能根据逻辑表达式或同一表中的另一列来验证列值。

触发器的应用和用法

1、触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用。

2、触发器的触发条件其实在定义的时候就已经设定好了。

3、触发器可以分为语句级触发器和行级触发器。简单的说就是语句级的触发器可以在某些语句执行前或执行后被触发。而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次。

4、具体举例:

1)、 在一个表中定义语句级的触发器,当这个表被删除时,程序就会自动执行触发器里面定义的操作过程。这个【删除表的操作】就是触发器执行的条件。

2)、 在一个表中定义行级的触发器,那当【这个表中一行数据发生变化】的时候,比如删除了一行记录,那触发器也会被自动执行了。

5、创建触发器语句

6、触发器作用(应用场景)

(1)数据确认

(2)实施复杂的安全性检查

(3)做日志记录,跟踪表上所做的数据操作等

(4)数据的备份和同步;

扩展资料

一、触发器介绍 

1、数据库触发器是一个与表相关联的、存储的 PL/SQL 程序。每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle 自动地执行触发器中定义的语句序 

列。 

2、触发器的作用 

触发器可用于: 

(1)数据确认 

(2)实施复杂的安全性检查 

(3)做审计,跟踪表上所做的数据操作等 

(4)数据的备份和同步 

3、触发器的类型 

(1)语句级触发器 

在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行 。 

(2)行级触发器(FOR EACH ROW) 

触发语句作用的每一条记录都被触发。在行级触发器中使用 old 和 new 伪记录变量,识别值的状态。

4、创建触发器的语法 

CREATE TRIGGER 触发器名 

{BEFORE |AFTER} 

{DELETE | INSERT | UPDATE } 

ON 表名 

 

参考资料

百度百科-Oracle触发器

数据库中的“触发器”是什么意思

在SQL中,名词触发器指“在数据库中为响应一个特殊表格中的某些事件而自动执行的程序代码。”(Wikipedia)说得简单一些,它是在一个特殊的数据库事件,如INSERT或DELETE发生时,自动激活的一段代码。触发器可方便地用于日志记录、对单个表格到其他链接式表格进行自动的“层叠式”更改、或保证对表格关系进行自动更新。当一个新整数值增加到数据库域中时,自动更新运行的总数的代码段是一个触发器。自动记录对一个特殊数据库表格所作更改的SQL命令块也是一个触发器实例。 参考: http://www.nmzol.com/ns/2007/200705/2007-05-05/ns_20070505214010_16672.html

如果你还想了解更多这方面的信息,记得收藏关注本站。

如何使用Python实现定时任务和周期性任务?照明定时控制方式实例

本文编辑:admin

更多文章:


内存卡无法格式化怎么办 删不掉(手机内存卡无法格式化怎么办想尽了办法都搞不定)

内存卡无法格式化怎么办 删不掉(手机内存卡无法格式化怎么办想尽了办法都搞不定)

本文目录手机内存卡无法格式化怎么办想尽了办法都搞不定手机内存卡无法格式化怎么办手机内存卡里的东西删不掉是怎么回事啊格式化也不行内存卡的文件删不掉怎么办我手机的内存卡里面的东西怎么删也删不掉,格式化也不行,该怎么办,卡是不是废了手机内存卡无法

2024年2月18日 19:05

vivo新上市手机有几款(最新的vivo是哪款手机)

vivo新上市手机有几款(最新的vivo是哪款手机)

本文目录最新的vivo是哪款手机vivo20年上市的手机有哪几款最新的vivo是哪款手机我们目前最新且配置较高的在售手机有:X80系列、iQOO Neo6 SE、S15e、iQOO Neo6、X Fold、X Note、iQOO 9/iQO

2023年12月8日 03:55

买nx200t为什么会后悔(没买社保会后悔吗为什么有些人觉得买社保不划算)

买nx200t为什么会后悔(没买社保会后悔吗为什么有些人觉得买社保不划算)

本文目录没买社保会后悔吗为什么有些人觉得买社保不划算为什么感觉每次买完衣服都会后悔呢这是什么心理为什么很多人买“7座车”后都后悔了,原因有哪些没买社保会后悔吗为什么有些人觉得买社保不划算感谢邀请,更感谢楼主的提问。楼主你好,没买社保你会后悔

2023年10月17日 13:20

三星心系天下2018(三星2018心系天下翻盖会坏不)

三星心系天下2018(三星2018心系天下翻盖会坏不)

本文目录三星2018心系天下翻盖会坏不三星W2018国行打电话外屏会显示心系天下图标吗三星2018心系天下忘记手机密码怎么办三星2018开机后出现心系天下卡住不动怎么办三星2018心系天下怎么设置30秒怎样设置三星2018接电话外屏显示心系

2024年6月15日 07:44

东芝2040C出现F400?棕刚玉F400是多少目

东芝2040C出现F400?棕刚玉F400是多少目

本篇文章给大家谈谈f400,以及东芝2040C出现F400对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录东芝2040C出现F400棕刚玉F

2024年6月13日 03:50

三星s20曲面屏曲度是多少(s20曲面屏弧度大吗)

三星s20曲面屏曲度是多少(s20曲面屏弧度大吗)

本文目录s20曲面屏弧度大吗三星s20参数是怎样的s20曲面屏弧度大吗弧度不大。三星S20的屏幕底部边框也很窄,和iPhone11Pro的底部边框宽度几乎差不多。而且三星S20这次并没有使用曲面弧度很大的屏幕,三星S20的屏幕几乎是和直面屏

2024年2月5日 16:50

魅族16x电池容量(魅族16和魅族16x,除了处理器不一样,还有哪里不一样呢)

魅族16x电池容量(魅族16和魅族16x,除了处理器不一样,还有哪里不一样呢)

本文目录魅族16和魅族16x,除了处理器不一样,还有哪里不一样呢荣耀v10和魅族16x哪个好OPPOz1和魅族16x那个更好魅族16x参数为什么魅族16的电池容量不能做大一点呢魅族16和魅族16x,除了处理器不一样,还有哪里不一样呢1.魅族

2024年5月25日 12:14

titanv和2080ti(泰坦V显卡和2080TI哪个更好)

titanv和2080ti(泰坦V显卡和2080TI哪个更好)

本文目录泰坦V显卡和2080TI哪个更好电脑是1060显卡,换成2060或2080ti的显卡,你觉得划算吗为啥显卡2080ti这么贵泰坦V显卡和2080TI哪个更好TITAN v是专业图型卡,并不适合玩游戏,但它略强于RTX2080ti。但

2024年5月28日 10:55

魅族手机代码大全(我的索爱手机是行货吗)

魅族手机代码大全(我的索爱手机是行货吗)

本文目录我的索爱手机是行货吗魅族手机拨号键输入什么代码可查询手机出厂日期华为手机如何解除帧数限制钛马星行车记录仪 没有四位代码怎么连接苹果手机辨别真假方法大全魅蓝手机测试代码都有哪些车牌号川A~Z各是什么地方啊我的索爱手机是行货吗  一、新

2024年1月20日 09:25

f710手柄如何链接Xbox one游戏机?游戏机半月手柄怎么使用

f710手柄如何链接Xbox one游戏机?游戏机半月手柄怎么使用

本文目录f710手柄如何链接Xbox one游戏机游戏机半月手柄怎么使用无线游戏手柄连不上游戏机红蓝手柄是什么游戏机什么牌子的游戏机手柄比较好想买一部手柄游戏机,和小孩一起玩,有哪些推荐有玩过小霸王游戏机的吗,带手柄的那种和男朋友一起玩sw

2023年8月29日 15:10

模拟装机游戏(您最喜欢哪五款主机游戏或者非主机游戏,为什么)

模拟装机游戏(您最喜欢哪五款主机游戏或者非主机游戏,为什么)

本文目录您最喜欢哪五款主机游戏或者非主机游戏,为什么为什么早期的电脑会自带一些小游戏在steam上有哪些非常好玩的模拟类游戏比如模拟修车这类的您最喜欢哪五款主机游戏或者非主机游戏,为什么最喜欢的五款游戏,只能说是现阶段喜欢玩的或者喜欢的什么

2023年9月1日 12:40

平板电脑怎么下载app(苹果ipad怎样下载软件呢)

平板电脑怎么下载app(苹果ipad怎样下载软件呢)

这篇文章给大家聊聊关于平板电脑怎么下载app,以及苹果ipad怎样下载软件呢对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录苹果ipad怎样下载软件呢ipad平板电脑如何安装软件怎么给iPad下载软件(用电脑)苹果ipad如何

2024年6月25日 20:35

jimmy choo(Jimmy Choo是哪个国家的牌子)

jimmy choo(Jimmy Choo是哪个国家的牌子)

本文目录Jimmy Choo是哪个国家的牌子jimmychoo是什么牌子jimmy choo中文是什么意思jimmy choo是什么牌子翻译成中文名jimmychoo怎么读 英语jimmychoo怎么读jimmychoo中文名叫什么Jimm

2023年7月20日 00:50

近期文章

本站热文

电脑包尺寸对照表(电脑包要多大)
2024-07-02 11:29:03 浏览:3755
e10000(皖E10000是什么车)
2024-06-28 08:30:56 浏览:3497
ati radeon hd 5650(电脑的显卡是ATI Mobility Radeon HD 5650 (MADION PRO) ( 1 GB ) 这个显卡)
2024-06-26 03:11:22 浏览:3092
华为mate20pro版本区别(mate20pro有必要买ud版吗)
2024-06-26 03:29:23 浏览:2615
ipad买蜂窝版还是wifi版(ipad air 5买蜂窝好不好)
2024-06-26 01:03:39 浏览:2221
vivo y3配置参数(vivoy3参数是什么)
2024-06-28 02:40:40 浏览:2061
标签列表

热门搜索