1
我需要將2行更新到2個不同的表中,然後將新行插入到另一個必須完成的不同表中,以使它們全部成功或失敗。 (我認爲這個詞是原子性的?)。我做了一些搜索,但似乎只能找到與多個插入或更新到一個表相關的問題。運行多個查詢,其中全部成功或全部失敗
下面是3個詢問我是否需要運行:
UPDATE submission SET status='a' WHERE idgreg = 119 AND status='p' AND userid = 126;
UPDATE greg SET iscomplete=1 WHERE idgreg = 119;
INSERT INTO completion (idperson, idgreg, datecompleted, idsubmission, mediaid, description,
privatestatus, contenttype, totalamount)
SELECT s.idperson, s.idgreg, s.datesubmitted, s.idsubmission, COALESCE(s.youtubeid, s.contentid) AS mediaidid, g.description, g.privatestatus,
g.contenttype, COALESCE(SUM(amount),0) AS totalamount
FROM submission s
INNER JOIN greg g on s.idgreg = g.idgreg
INNER JOIN contribution c on s.idgreg = c.idgreg
WHERE s.idsubmission = 36 AND c.ispaid = 1;
這是行不通的。我故意讓其中一個失敗,另外兩個查詢仍然更新。我在主要問題中添加了一張圖片來展示發生了什麼事。有任何想法嗎? – Mitchell
您必須選擇一個**交易**引擎,如* InnoDb *。請參閱文檔https://dev.mysql.com/doc/refman/5.0/en/ansi-diff-transactions.html –
@Mitchell您應該使用存儲過程來利用'ROLLBACK',它將撤銷發生錯誤時的一切。 –