在select语句中更新表格

5

有没有办法在mysql选择查询的select_expr部分内更新表格?这是我尝试实现的示例:

SELECT id, name, (UPDATE tbl2 SET currname = tbl.name WHERE tbl2.id = tbl.id) FROM tbl;

这在MySQL中给了我一个错误,但我不明白为什么只要我没有更改tbl,这就不可能实现。
编辑: 我将澄清为什么我不能使用普通的结构来完成此操作。
这是我正在处理的问题的更复杂的示例:
SELECT id, (SELECT @var = col1 FROM tbl2), @var := @var+1, 
(UPDATE tbl2 SET col1 = @var) FROM tbl WHERE ...

我现在遇到的问题是,在select语句中递增变量,并且想要在选择行时反映这个变化,因为我需要在执行过程中使用这个变量的值。这里给出的示例可能可以用其他方法实现,但是我的真实例子由于有太多不必要的代码,所以我不会在这里贴出来,但是需要这种功能。

3个回答

4

如果你的目标是每次查询tbl1时更新tbl2,那么最好的方式是创建一个存储过程来执行,并将其包含在一个事务中,如果需要原子性,则可能需要更改隔离级别。

不能在select语句中嵌套update语句。


2

你想要什么结果?是查询的结果还是更新的结果。

如果你想根据查询结果进行更新,可以按照以下方式操作:

update table1 set value1 = x.value1 from (select value1, id from table2 where value1 = something)  as x where id = x.id

我将对我的问题进行澄清。 - Per Stilling

0

开始事务;

-- 获取当前值

SELECT value FROM counters WHERE id = 1 FOR UPDATE;

-- 增加计数器

UPDATE counters SET value = value + 1 WHERE id = 1;

提交事务;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接