用一条SQL命令更新表A,插入表B?

发布于 2024-12-04 14:05:41 字数 689 浏览 0 评论 0原文

我正在尝试找到一种方法,用布尔值更新表 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 中创建一条新记录code> 并将 vendor_codevendor_name 插入到我的新记录中的相应列中。

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

I'm trying to find a way to update table A with a boolean value and then create a record in table B (if the boolean in table A is false) in the same SQL statement in my MySQL database, is this possible? Or, do I need to create two different statements?

My current logic goes like this:

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

If the above query returns false on tbl_a.has_page then I want to update the record to be true

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

then, I want to create a new record in tbl_b with the vendor_code and vendor_name inserted into the corresponding columns in my new record.

I'm using ColdFusion and can make use of <cftransaction> to keep in touch with the DB if I want to use a few statements but, I was wondering if there was a way to do it in one statement.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

她说她爱他 2024-12-11 14:05:41

您有两个选择:

  1. 多语句
  2. 触发器

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

You have two options:

  1. Multiple Statements
  2. Trigger

The problem with multiple statements is that if you run an update or insert from outside your application, then your business rules won't be honored. If you make these changes via a trigger, then it doesn't matter if the modifications come from your application, or a query ran directly against the database, your business logic will always be honored.

墨小沫ゞ 2024-12-11 14:05:41

您将需要两个语句或一个触发器来执行此操作。

You will need either two statements or a trigger to do this.

帅气尐潴 2024-12-11 14:05:41

在我看来,RedFilter 对触发器的回答是最好的。另一种选择:您的 MySQL 版本支持存储过程吗?您可以触发一条语句(例如存储过程),然后该语句将执行内部调用。不理想,但有可能。

RedFilter's answer of a trigger is the best, imo. One alternative: Does your version of MySQL support stored procedures? You could fire one statement (e.g. the stored proc) which would then execute the internal calls. Not ideal, but possible.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文