2011-09-14 59 views
0

我试图找到一种方法来更新表A的布尔值,然后在表B中(如果表A布尔是假的)在我的MySQL数据库中相同的SQL语句中创建一个记录,这可能吗?或者,我是否需要创建两个不同的语句?更新表A,用一条SQL命令插入表B?

我现在的逻辑是这样的:

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那么我想更新的记录是真实的

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

那么上面的查询返回false,我想创建一个tbl_b中的新记录与vendor_codevendor_name插入到我的新记录中的相应列中。

我正在使用ColdFusion,如果我想使用一些语句,可以使用<cftransaction>与DB保持联系,但是,我想知道是否有方法在一个语句中执行此操作。

+0

不,这是不可能的;你必须创建两条语句 – arnaud576875

回答

3

你有两个选择:

  1. 多个语句
  2. 触发

与多条语句的问题是,如果你运行的更新或插入您的应用程序,那么你的商业规则将不会兑现。如果您通过触发器进行这些更改,那么修改是否来自您的应用程序或查询是否直接针对数据库运行并不重要,您的业务逻辑将始终得到遵守。

+0

谢谢你包含两个选项的逻辑。我怀疑触发将是实现我目标的最有效手段。另外,谢谢你清理我的问题。 – Ofeargall

1

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