我需要更新單個事務中的兩個表。各個查詢是這個樣子:在同一個MySQL事務中更新相關表的方法?
1. INSERT INTO t1 (col1, col2)
VALUES (val1, val2)
ON DUPLICATE KEY
UPDATE col2 = val2;
如果上面的查詢導致插入,然後我需要運行在第二個表如下聲明:
2. INSERT INTO t2 (col1, col2)
VALUES (val1, val2)
ON DUPLICATE KEY
UPDATE col2 = col2 + val2;
否則,
3. UPDATE t2
SET col2 = col2 - old_val2 + val2
WHERE col1 = val1;
-- old_val2 is the value of
t1.col2 before it was updated
現在我首先在t1上運行SELECT,以確定語句1是否會在t1上導致插入或更新。然後我在事務中運行語句1和2和3中的任一個。我可以在一次交易中完成所有這些交易的方式是什麼?
的方法,我在想的是:
UPDATE t2, t1
set t2.col2 = t2.col2 - t1.col2
WHERE t1.col1 = t2.col2
and t1.col1 = val1;
INSERT INTO t1 (col1, col2)
VALUES (val1, val2)
ON DUPLICATE KEY
UPDATE col2 = val2;
INSERT INTO t2, t1 (t2.col1, t2.col2)
VALUES (t1.col1, t1.col2)
ON DUPLICATE KEY
UPDATE t2.col2 = t2.col2 + t1.col2
WHERE t1.col1 = t2.col2
and t1.col1 = val1;
不幸的是,有沒有多表INSERT ...對重複密鑰更新在MySQL 5.0。我還能做什麼?
那麼,我需要做一個SELECT無論如何得到old_val2在語句#3。 – 2010-03-23 04:44:58