我在託管一個網站,可以由授權用戶添加內容。內容放置在網頁的塊內。授權用戶可以創建新塊並按特定順序放置塊。塊的順序和內容存儲在數據庫中。MySQL:插入,更新和檢查單個查詢
當新塊被創建了以下兩個MySQL查詢執行:
的順序號,數據庫內的塊的,與下面的查詢更新:
UPDATE `Block`
SET `block_order` = `block_order` + 1
WHERE `tab_nr` = $tab_nr
AND `block_order` > $nr;
新塊是通過執行以下查詢添加:
INSERT INTO `Block`
(`id`, `tab_nr`, `block_order`, `html`, `created`)
VALUES
(NULL, $tab_nr, $nr + 1, '$html', CURRENT_TIMESTAMP);
這些查詢的問題是,無論第二個查詢發生什麼,都會執行第一個查詢。如果第二個查詢失敗(無論原因如何),則其他塊的訂單號仍會因執行第一個查詢而更改。這樣塊順序號就搞砸了。
我需要的是一個查詢,它將新塊添加到數據庫並更新其他塊的訂單號,當且僅當存在相同編號的塊時。但問題是,我無法找到能滿足我需要的任何查詢。例如,「ON DUPLICATE KEY UPDATE」只會更新與新插入衝突的行,但在我的情況下,其他行也需要更新。對於擺脫上述問題的查詢是否有任何建議?
您需要了解***事務***數據庫查詢(http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-transactions.html)。 – Matt 2012-07-31 15:35:16
MySQL中的[START TRANSACTION,COMMIT和ROLLBACK](http://dev.mysql.com/doc/refman/5.5/en/commit.html)語法。 – 2012-07-31 15:36:30