首页 > 编程知识 正文

mysql触发器不起作用,oracle触发器update写法

时间:2023-05-03 11:51:34 阅读:176801 作者:4810

触发语句使用了两个特殊的表: deleted表和inserted表。 微软? SQL Server 2000自动创建和管理这些表。 可以使用这两个临时驻留内存中的表来测试特定数据更改的效果并设置触发操作的条件。 但是,不能直接更改表中的数据。

inserted和deleted表主要用于触发器。

扩展表间引用完整性

在基于视图的基表中插入或更新数据

检查错误,根据错误行动

找出数据修改前后表的状态差异,并根据该差异采取行动。

Deleted表包含受DELETE和UPDATE语句影响的行的副本。 执行DELETE或UPDATE语句时,会从触发器表中删除行并将其转发到deleted表中。 Deleted表和触发器表通常没有同一行。

Inserted表包含受INSERT和UPDATE语句影响的行的副本。 在插入或更新事务中,inserted表和触发器表中都将添加新行。 Inserted表中的行是触发器表中新行的副本。

事务更新类似于在删除后执行插入。 首先旧行被复制到deleted表中,然后新行被复制到触发器表和inserted表中。

设置触发条件时,请确保在触发触发器的操作中正确使用inserted和deleted表。 测试INSERT时引用DELETEd表或测试delete时引用inserted表不会导致错误,但在这种情况下,这些触发器测试表不包含任何行。

说明:如果触发操作依赖于受一个数据更改影响的行数,则使用多行数据更改(基于SELECT语句的INSERT、DELETE、UPDATE测试),并采取检查@@ROWCOUNT等对策

SQL Server? 在2000中,AFTER触发器不能引用inserted和deleted表中的text、ntext或image列。 但是,INSTEAD OF触发器可以引用这些列。 详细内容请参照CREATE TRIGGER。

在INSTEAD OF触发器中使用inserted和deleted表

传递给表中定义的INSTEAD OF触发器的inserted和deleted表遵循与传递给AFTER触发器的inserted和deleted表相同的规则。 inserted和deleted表的格式与定义了INSTEAD OF触发器的表的格式相同。 inserted和deleted表中的每一列都直接映射到基表中的列。

当引用具有INSTEAD OF触发器的表的INSERT或UPDATE语句需要提供列值时,规则与表中没有INSTEAD OF触发器时的规则相同。

计算列或timestamp数据类型的列不能具有值。

除非列的IDENTITY_INSERT为ON,否则不能为具有IDENTITY属性的列指定值。 如果IDENTITY_INSERT为ON,则INSERT语句必须指定值。

INSERT语句必须为所有没有DEFAULT约束的NOT NULL列提供值。

对于计算列、id列或非timestamp列,允许null值的列或DEFAULT定义中NOT NULL列的值可以是任意的。

当INSERT、UPDATE或DELETE语句引用具有INSTEAD OF触发器的视图时,数据库引擎会调用触发器,而不是直接对任何表执行操作。 即使为视图生成的inserted和deleted表的信息格式与基表的数据格式不同,触发器也必须在生成执行基表请求操作所需的语句时使用inserted和deleted表中的信息

传递给视图中定义的INSTEAD OF触发器的inserted和deleted表的格式与该视图中定义的SELECT语句的选择列表相匹配。 例如:

createviewemployeenames (employeeid,LName,FName ) )。

AS

SELECT EmployeeID,LastName,FirstName

FROM Northwind.dbo.Employees

视图的结果集有三列: int列和nvarchar列。 传递给在视图中定义的INSTEAD OF触发器的inserted和deleted表也包含名为EmployeeID的int列、名为LName的nvarchar列和名为FName的nvarchar列

视图选择列表还包含不直接映射到单个基本表列的表达式。 视图表达式(如常量和函数调用)可能不引用列,并且会被忽略。 复杂的表达式引用多个列,但在inserted和deleted表中,每个插入的行只有一个值。 如果视图中的简单表达式引用了具有复杂表达式的计算列,则这些简单表达式也存在类似的问题。 视图的INSTEAD OF触发器必须处理这些类型的表达式。 有关详细信息,请参见视图中INSTEAD OF触发器的表达式和计算列。

顺便说一下,针对某个表制作触发后,分为3种情况进行讨论

1 .插入(Insert )

Inserted表有数据,Deleted表没有数据

2 .删除操作(Delete )

Inserted表没有数据,Deleted表有数据

3 .更新操作(更新)

Inserted表中有数据(新数据),Deleted表中有数据(旧数据)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。