我需要更新单个事务中的两个表。各个查询是这个样子:在同一个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