发布网友 发布时间:2022-04-25 18:03
共4个回答
热心网友 时间:2023-10-23 06:07
我看ORALCE,然后是这样理解的,
例如对一个表进行插入insert操作,在插入时触发一个触发器,如果是
事前触发:“before insert on 表名”,则可以在未插入前,对想插入的那一行“insert into 表名 values(a,b,c)”里的a,b,c进行操作,
例如把a换成f,“:new.a :=f ”,
":new"是插入前临时内存(用于insert update),保存着insert的记录,“:new.a”就引用了临时记录的a,“:new.a :=f ”就是把f放进这个a里面,然后才执行临时内存写入表,这时实际插入到表的是(f,b,c)了。
事后触发:因为有时有两个表是相关联的,如果你删除了第一个表,第二个表的某写记录的找不到关联,就变得没意义了,所以为了实现事务的完整性,在删除第一表的某记录后,还要同时删除第二个表的对应记录,这时就用到事后触发了“after delete on 表1”,在对表1进行删除操作时“delete from 表1 where 表1.id='001';”,
同时删除表2的记录"delete from 表2 where 表2.id=:old.id",
":old"是操作后临时内存(用于delete,update),它保存了进行删除操作后的记录,这里相当于删除表2中“表1.id=表2.id”的记录。
一楼朋友说的事后触发不能撤消好象不对的,事后触发就是为了保证事务的完整性,只要rollback回滚操作,表1和表2的删除操作都会被撤消的。
热心网友 时间:2023-10-23 06:07
事前触发是指,在数据真正写入数据库之前发生,如果这时撤销该操作,数据就不会真正存入数据库。
事后触发是指,数据已经真实的写入数据库之后才发生,此时已不能撤销该操作。
热心网友 时间:2023-10-23 06:08
sqlserver中事前触发器就是 delete触发器 因为如果在你删除了数据之后怎么找到 之前的数据呢 所以是之前触发器
之后触发器就是insert触发器 同理 人还没有插入怎么知道数据
你太小气了 就五分还 详细回答
热心网友 时间:2023-10-23 06:08
先后的区别还用说啊?