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

标签 mysql

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

最佳答案

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

这是您在单笔交易中如何做到这一点;

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_INSERT_ID() 函数

UPDATE tbl 
SET view = LAST_INSERT_ID(view) + 1
WHERE id = 10;

然后,要获得新的观看次数,您需要在更新后立即执行此查询。更新后您不能执行任何其他查询,否则您将无法获得预期的值。

   SELECT LAST_INSERT_ID();

关于mysql - 在 mysql 的一个连接中选择和更新相同的表和行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30822776/

相关文章:

PHP select 不返回值

php - 两个期间之间的标记逻辑

mysql - 数据透视表的 SQL 查询

PHP 页面不会重新加载 # HTML

MySql、LOAD DATA 或 BATCH INSERT 或任何其他更好的批量插入方式

php - 这段代码的性能很糟糕

mysql - 将具有级别的树节点转换为行列表

php - Mysql "is not NULL"运行非常缓慢

php - 将这两个 MySQL 查询合并为一个

mysql - 时间戳列的字段列表中的未知列