好吧,我有一個奇怪的扭曲更新函數。由於結構的性質,我運行刪除查詢,然後插入查詢,而不是實際的「更新」查詢。它們按照該順序專門運行,以便插入的新項目不會被刪除。實質上,項目由插入查詢中匹配的屬性標識刪除。由於該屬性不是主索引,因此「ON DUPLICATE KEY UPDATE」不起作用。驗證一個查詢是否會在按相反順序執行另一個查詢之前工作
所以這裏的困境。在開發和測試過程中,刪除查詢將無失敗運行,但如果我將INSERT查詢的輸入搞亂並且失敗,那麼DATA已經被刪除而不會被重新插入,這意味着重新生成新的測試數據,甚至更糟糕的是,如果它在生產中失敗,那麼用戶將失去他們正在進行的一切。
所以,我知道MySQL在實際運行之前驗證了一個查詢,那麼是否有可能在運行DELETE查詢之前確保INSERT查詢有效?
<cfquery name="delete" datasource="DSOURCE">
DELETE FROM table
WHERE colorid = 12
</cfquery>
<!--- check this query first before running delete --->
<cfquery name="insert" datasource="DSOURCE">
INSERT INTO table (Name, ColorID)
VALUES ("tom", 12)
</cfquery>
對不起,我應該更清楚,這是既不主,也不是唯一的。它實際上是通過一個連接表來運行的(我主要是一個Rails開發人員,所以我將它稱爲has_and_belongs_to_many關係。我現在還處於Coldfusion的早期階段,不知道CF們稱之爲什麼) –
但是,它看起來像事務定我了,謝謝 –
@Kyle - 歡迎:)如果你還沒有使用它,一定要使用[cfqueryparam](http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24 -7f6f.html)與所有用戶提供的參數。 – Leigh