假设,当对表A进行插入时,我将开发一个触发器,将插入记录表A 即可。 因此,我想知道系统如何处理那种漏洞,或者它将继续作为循环,直到系统挂起,这需要重新启动并可能删除数据库。
如果您是任何类型DBMS的专家,欢迎您发表评论......!我正在尝试收集有关此问题或漏洞的几乎所有DBMS的信息。
谢谢......!
答案 0 :(得分:1)
我只能和Oracle说话,我对MySQL一无所知。
在Oracle中,这种情况称为突变。 Oracle不会陷入无限循环。它将检测条件,并引发ORA-04091错误。
那是:
ORA-04091: table XXXX is mutating, trigger/function may not see it
标准解决方案是定义一个包含三个函数和一个包级别数组的包。 这三个功能如下: 1.)初始化 - 这只会使数组归零。 2.)save_row - 这会将当前行(uk或pk)的id保存到arrray中。 3.)process_rows - 这将遍历数组,并实际为每一行执行触发操作。
现在,定义一些触发器操作: 语句级别BEFORE:调用初始化 行级别BEFORE或AFTER:调用save_row 语句级别AFTER:调用process_rows
通过这种方式,Oracle可以避免突变,并且您的触发器可以正常工作。
可在此处找到更多详细信息和一些示例代码: https://asktom.oracle.com/pls/asktom/ASKTOM.download_file?p_file=6551198119097816936
希望有所帮助。
答案 1 :(得分:0)
如果使用而不是触发器,则只能在同一个表中插入记录。在所有其他情况下,您只能修改要插入的记录。
我希望这可以回答你的任务。
答案 2 :(得分:0)
你可以在mysql DBMS中创建触发器。 检查以下链接以创建插入触发器syntex
http://www.techonthenet.com/oracle/triggers/after_insert.php