gpt4 book ai didi

mysql - 使用触发器有条件插入的最佳方法

转载 作者:行者123 更新时间:2023-11-29 12:37:11 25 4
gpt4 key购买 nike

我想创建一个 SQL 触发器,当且仅当它通过给定条件时才插入新行。我可以想到几种方法来做到这一点,但我不确定哪种是最好或正确的方法。

  1. 执行 AFTER INSERT 触发器,然后在不满足条件时删除新行。
  2. 执行 BEFORE INSERT 触发器,如果​​失败则引发应用程序错误。
  3. ???

最佳答案

选项 1 创建竞争条件。我会明确避免这种情况。

选项 2 可能会导致 INSERT 速度显着变慢,但可以工作。

选项 3 是一个存储过程,但您可能需要为插入的每一行调用该过程,除非您正确设置安全性,否则实际上可能无法阻止用户直接插入数据。

选项 4 是将所有内容插入临时表或事务表中,然后使用带有查询或 View 的代理或过程,仅将有效数据移动到实时表。这是非常老派且相对令人讨厌的做法,因为您不再像现代 RDBMS 那样使用 RDBMS。预计会出现很多关键违规问题和同步问题。并且您遇到与选项 3 相同的安全问题。此方法目前通常仅用于批量导入和导出。

选项 5 是在应用程序而不是数据库中验证数据。这可行,但当您的客户尝试像使用 RDBMS 一样使用您的 RDBMS 时,就会遇到问题。然后您会遇到与选项 3 相同的安全问题。它实际上不会解决问题或防止应用程序外部的程序存储无效数据。

选项 6 是使用支持 CHECK 约束的 RDBMS,这几乎是除 MySQL 或 MariaDB 之外的所有内容。 MS SQL Server、Oracle、DB2、PostgreSQL,甚至 MS Access 和 SQLite 都支持 CHECK 约束。 MySQL 不这样做,这有点荒谬。

关于mysql - 使用触发器有条件插入的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26595650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com