我可以使用一个查询更新两个相同的表吗?
TABLEA
_____________________________
| id | value |
|_____________|_____________|
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
| 5 | e |
|_____________|_____________|
TABLEB
_____________________________
| id | value |
|_____________|_____________|
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
| 5 | e |
|_____________|_____________|
我想同时更新两个表(SET value = 'z' WHERE id=3
)。
这可能吗?
-Thanks
答案 0 :(得分:2)
通过阅读mysql更新引用,它说:
对于多表语法,UPDATE 更新每个表中的行 table_references满足 条件。在这种情况下,ORDER BY和 LIMIT无法使用。
更新项目,月份SET items.price = month.price WHERE items.id = month.id;
答案 1 :(得分:2)
可以同时更新它们,但不能使用单个SQL语句(好吧,它是,但不建议这样做)。这几乎是事务的全部要点:您单独更新每个表,但这些更改在您提交之前不会生效。对于任何其他用户,表格同时更新。
如果你真的坚持在一个语句中更新两者,下面的代码可能会有效,但它取决于两个表都有ID作为主键,并且可能取决于你正在使用的特定RDBMS:
update (select tablea.id,
tablea.value v1,
tableb.value v2
from tablea
join tableb
on tablea.id = tableb.id)
set v1 = 'z'
where id = 3
答案 2 :(得分:1)
MySQL使用以下语法支持multiple-table updates:
UPDATE tablea, tableb
SET tablea.value = 'z', tableb.value = 'z'
WHERE (tablea.id = tableb.id) AND (tablea.id = '3');
测试用例:
CREATE TABLE tablea (id int, value char(1));
CREATE TABLE tableb (id int, value char(1));
INSERT INTO tablea VALUES (1, 'a');
INSERT INTO tablea VALUES (2, 'b');
INSERT INTO tablea VALUES (3, 'c');
INSERT INTO tablea VALUES (4, 'd');
INSERT INTO tablea VALUES (5, 'e');
INSERT INTO tableb VALUES (1, 'a');
INSERT INTO tableb VALUES (2, 'b');
INSERT INTO tableb VALUES (3, 'c');
INSERT INTO tableb VALUES (4, 'd');
INSERT INTO tableb VALUES (5, 'e');
结果:
SELECT * FROM tablea;
+------+-------+
| id | value |
+------+-------+
| 1 | a |
| 2 | b |
| 3 | z |
| 4 | d |
| 5 | e |
+------+-------+
5 rows in set (0.00 sec)
SELECT * FROM tableb;
+------+-------+
| id | value |
+------+-------+
| 1 | a |
| 2 | b |
| 3 | z |
| 4 | d |
| 5 | e |
+------+-------+
5 rows in set (0.00 sec)
<强>更新强>
如果您不想重复设置两次的值,可能需要使用以下技巧:
UPDATE tablea, tableb, (SELECT 'z' val) d
SET tablea.value = d.val, tableb.value = d.val
WHERE (tablea.id = tableb.id) AND (tablea.id = '3');
答案 3 :(得分:1)
大多数RDBMS只允许您一次在一个表上直接插入,更新或删除。如果你有外键和级联,那么一些插入和删除可以在多个表上进行
但是,如果您使用的是关系数据库,则不应该有两个需要相同更新的表。一个驱动程序behing关系数据库是数据完整性,关系仅以一种方式保存..e / g /在这种情况下,如果id为3意味着值为c(或ch之后的z),则关系应仅保存在一个地方