在mysql的一个连接中选择并更新相同的表和行

在mysql的一个连接中选择并更新相同的表和行,mysql,Mysql,这似乎是一个重复的问题,但似乎总是涉及多个表的问题。当选择表中的一行时,我还需要+1同一行中的视图计数。我知道我不能在同一个查询中使用一个触发器或两个语句,但这两件事可以通过与数据库的单个连接来完成吗?首选的方法是选择一行,然后+1视图字段 它可以在同一个连接中完成,但我想不出一种方法可以使用一个查询来完成 以下是您在单个事务中如何做到这一点 START TRANSACTION; UPDATE tbl SET view=view+1 WHERE id = 10; SELECT * FROM t

这似乎是一个重复的问题,但似乎总是涉及多个表的问题。当选择表中的一行时,我还需要+1同一行中的视图计数。我知道我不能在同一个查询中使用一个触发器或两个语句,但这两件事可以通过与数据库的单个连接来完成吗?首选的方法是选择一行,然后+1视图字段

它可以在同一个连接中完成,但我想不出一种方法可以使用一个查询来完成

以下是您在单个事务中如何做到这一点

START TRANSACTION;
UPDATE tbl SET view=view+1 WHERE id = 10;

SELECT * FROM tbl WHERE id = 10;
COMMIT;
第二个“更好”的方法是,您可以这样做,它不必两次读取
tbl

UPDATE tbl 
SET view = (@viewsCount := view + 1)
WHERE id = 10;
为了得到视图计数的新值,我会这样做

SELECT @viewsCount;
第三种方法是像这样使用
LAST\u INSERT\u ID()
函数

UPDATE tbl 
SET view = LAST_INSERT_ID(view) + 1
WHERE id = 10;
然后,要获取新的视图计数,您需要在更新后立即执行此查询。更新后不能执行任何其他查询,否则将无法获得预期值

   SELECT LAST_INSERT_ID();

更新表集val=val+1
-如果您也需要该行,则必须执行两个查询。一个存储过程。一个
select
语句不会修改数据库。我认为他在这里试图做的是避免必须读取表两次,一次在更新中,另一次在读取中。请看我下面的答案,因为这应该是一种使用2个查询更新和阅读的方法,但您只对表操作一次。谢谢Mike。我认为第一种选择符合我的要求。第二个选项只有一个表读取,这确实是我想要完成的,但是我需要对视图计数进行选择和更新。如果这很重要,我不需要使用select获取更新的视图计数。我只是想找到一种最有效的方法来跟踪日常crone作业中所选行的视图计数。尽可能使用选项1。您还可以在视图列上选择后添加触发器,该触发器将自动为您增加值。我不建议使用触发器,因为它会导致速度减慢