当前位置: 首页 > 面试题库 >

数据库触发了邪恶吗?

壤驷俊逸
2023-03-14
问题内容

数据库触发了一个坏主意吗?

以我的经验,它们是邪恶的,因为它们可能导致令人惊讶的副作用,并且难以调试(尤其是当一个触发器触发另一个触发器时)。通常,开发人员甚至根本不考虑是否存在触发器。

另一方面,如果您有每次FOO在数据库中创建新逻辑时都必须发生的逻辑,那么将其放置在最简单的位置就是FOO表上的插入触发器。

我们唯一一次使用触发器是为了完成一些非常简单的事情,例如设置ModifiedDate


问题答案:

触发器的主要问题是

  • 它们完全是全局的-无论表活动的上下文如何,它们都适用;
  • 他们是隐身的。很容易忘记它们在那里,直到它们以意想不到的(并且非常神秘)的后果伤害了您。

这只是意味着需要在适当的情况下仔细使用它们;根据我的经验,这仅限于关系完整性问题(有时粒度要比声明性要好);并且通常不用于商业或交易目的。YMMV。



 类似资料:
  • Lua 是所有脚本语言中最快、最简洁的,我们爱她的快、她的简洁,但是我们也不得不忍受因为这些快、简洁最后带来的一些弊端,我们来挨个数数 module 有多少“邪恶”的吧。 由于 lua_code_cache off 情况下,缓存的代码会伴随请求完结而释放。module 的最大好处缓存这时候是无法发挥的,所以本章的内容都是基于 lua_code_cache on 的情况下。 先看看下面代码: loc

  • 7.2 邪恶的代码 现在让我们本着学以致用的目的,用注入搞点好玩的东西。我们将创造一个后门程序, 将它命名为一个系统中正规的程序(比如 calc.exe)。只要用户执行了 calc.exe,我们的后门 就能获得系统的控制权。cacl.exe 执行后,就会在执行后门代码的同时,执行原先的 calc.exe (之前我们的后门命名成 calc.exe,将原来的 cacl.exe 移到别的地方)。当 ca

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 该语言的创造者写的: Go不提供断言。 它们无疑是很方便的,但是我们的经验是程序员将它们用作拐杖,以避免考虑适当的错误处理和报告。正确的错误处理意味着服务器在

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案能得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 9年前关闭。 在这个问题中,有什么方法可以只接受JTextField中的数值吗?答案之一表明JFormattedTextField存在问题。 我还没有使用过它,但是有人可以

  • 问题内容: 在我用php开发的所有年份中,我一直都听说使用是邪恶的。 考虑以下代码,使用第二个(更优雅)的选项是否有意义?如果没有,为什么? 问题答案: 在将eval()称为纯邪恶时,我会保持谨慎。 动态评估是一个强大的工具,有时可以节省生命。使用eval()可以解决PHP的缺点(请参见下文)。 eval()的主要问题是: 潜在的不安全输入。 传递不受信任的参数是一种失败的方法。确保参数(或其一部

  • 问题内容: 是否可以将触发器应用于MySQL中的跨数据库访问?如果是,请举一个例子。我的目的是如果在database1中插入/更新/删除了任何新数据,则在database2中插入/更新/删除数据。我正在使用MySQL 5.1 问题答案: 是的你可以。您可以创建一个过程并在触发器中调用它。程序示例: 然后创建触发器: