我有两张结构相同的桌子。 Table1
保留审核数据,table2
保存尚未审核的数据。
表1
+------+-----------+-----------------+--------+-----------+----------+ | "id" | "name" | "description" | "type" | "country" | "status" | +------+-----------+-----------------+--------+-----------+----------+ | "1" | "Title 1" | "Description 1" | "1" | "US" | "0" | | "2" | "Title 2" | "Description 2" | "1 " | "UK" | "0" | +------+-----------+-----------------+--------+-----------+----------+
表2
+------+-----------+-----------------+--------+-----------+----------+ | "id" | "name" | "description" | "type" | "country" | "status" | +------+-----------+-----------------+--------+-----------+----------+ | "1" | "Title 1" | "Description 1" | "1" | "US" | "2" | | "2" | "Title 2" | "Description 2" | "1 " | "UK" | "2" | +------+-----------+-----------------+--------+-----------+----------+
我正在尝试使用单个sql更新两个表中的列status
。实际上,主持人只更新table2
,因为那是他可以使用的表格。
当table2
两个更新时,table1
可以同时更新吗?使用单个sql?现在,我正在使用2个不同的会话sql语句。
现在我喜欢这个:
UPDATE table2 set status = 0 where id = spid and country = spcountry;//Update table2 first
UPDATE table1 a
INNER JOIN table2 b
ON a.id = b.id and a.country = b.country
SET a.status = b.status
WHERE a.id=spid;
我希望做什么:示例
$status = 0;//php
update table1, table2 set status = $status where id=1 and conuntry = 'us' in table1 and table2.//The id and country need to be the same in both tables.
答案 0 :(得分:2)
虽然您可以使用以下语法更新两个表
UPDATE TBL1, TBL2
SET TBL1.status = 'Blah', TBL2.status = 'blah'
WHERE TBL1.id = TBL2.id
AND TBL2.id = 2;
但这可能有害。请考虑以下情况:当TBL2包含id = 2的行时,而TBL1没有id = 2的行。这会导致更新失败。为了使其工作,TBL1和TBL2必须完全相同。 如果这两个表格完全相同,为什么首先没有两个表呢?
@invisal如果它失败了,所有这一切都会发生0行更新, 对?它不会导致脚本停止运行。 - jmenezes
首先,您需要确保这两个表具有相同的数据:
它不会阻止您的脚本运行,但您需要强制执行这些条件。如果两个表不一致,那么有时更新将无法正常工作。没有按预期工作的脚本和抛出错误的脚本之间没有太大区别。他们俩都没有做他们应该做的事情。
答案 1 :(得分:1)
而是使用单个语句更新2个表(这很麻烦),在查询/存储过程中使用Transactions
可能是一种更简单的方法。它将确保一次性更新两个表。
START TRANSACTION;
UPDATE table1 SET summary=@A WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
希望这有帮助!!
答案 2 :(得分:0)
您可以通过table2
CREATE TRIGGER tg_table2_update
AFTER UPDATE ON table2
FOR EACH ROW
UPDATE table1
SET status = NEW.status
WHERE id = NEW.id AND country = NEW.country;
这是 SQLFiddle 演示。
答案 3 :(得分:0)
这可能会这样做,但我还没有测试过:
begin transaction t1;
UPDATE table2
set status = 0
where id = spid and country = spcountry;
UPDATE table1 a INNER JOIN table2 b ON a.id = b.id and a.country = b.country
SET a.status = b.status
WHERE a.id=spid;
commit transaction t1;