2011-09-14 105 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),然後執行內部調用。不理想,但可能。