【问题标题】:Update table A, Insert into table B with one SQL command?用一个 SQL 命令更新表 A,插入表 B?
【发布时间】:2011-09-15 02:40:54
【问题描述】:

我正在尝试找到一种方法来使用布尔值更新表 A,然后在我的 MySQL 数据库中的同一 SQL 语句中在表 B 中创建一条记录(如果表 A 中的布尔值为 false),这可能吗?或者,我需要创建两个不同的语句吗?

我现在的逻辑是这样的:

SELECT tbl_a.vendor_code, tbl_a.vendor_name, tbl_a.has_page 
FROM tbl_a 
WHERE tbl_a.vendor_code = 'myvendorcode'

如果上述查询在tbl_a.has_page 上返回 false,那么我想将记录更新为 true

UPDATE tbl_a 
SET tbl_a.has_page = true 
WHERE tbl_a.vendor_code = 'myvendorcode'

然后,我想在tbl_b 中创建一条新记录,并将vendor_codevendor_name 插入到我的新记录的相应列中。

我正在使用 ColdFusion,如果我想使用一些语句,可以使用 <cftransaction> 与数据库保持联系,但是我想知道是否有办法在一个语句中做到这一点。

【问题讨论】:

  • 不,这是不可能的;你必须创建两个语句

标签: mysql coldfusion insert


【解决方案1】:

你有两个选择:

  1. 多个语句
  2. 触发器

多个语句的问题在于,如果您从应用程序外部运行更新或插入,那么您的业务规则将不会得到遵守。如果您通过触发器进行这些更改,那么无论这些修改来自您的应用程序,还是直接针对数据库运行的查询,您的业务逻辑都将得到遵守。

【讨论】:

  • 感谢您提供这两个选项背后的逻辑。我怀疑触发器将是实现我的目标的最有效手段。另外,感谢您清理我的问题。
【解决方案2】:

您将需要两个语句或 trigger 来执行此操作。

【讨论】:

    【解决方案3】:

    RedFilter 对触发器的回答是最好的,imo。一种选择:您的 MySQL 版本是否支持存储过程?您可以触发一个语句(例如存储过程),然后执行内部调用。不理想,但可能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 2020-04-22
      • 2013-10-01
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 2011-09-28
      相关资源
      最近更新 更多