mysql - 如何自动更新多行并选择它们?

标签 mysql sql

我想更新多行:

UPDATE tbl SET x = x + 5 WHERE x < 7;

然后,我想选择相同的行作为结果集:

SELECT * FROM tbl WHERE (row fulfilled previous condition);

我该怎么做?

最佳答案

这个答案适用于 mySQL,但它也应该足够通用以适用于其他 DBMS。它避免了额外的行、限制或丑陋的黑客攻击,易于扩展,并且不会在不需要时损失性能。

START TRANSACTION;
DROP TEMPORARY TABLE IF EXISTS temp;
CREATE TEMPORARY TABLE temp AS (
    SELECT * FROM tbl WHERE x < 7
);
UPDATE temp SET x = x + 5;
REPLACE INTO tbl SELECT * FROM temp;
SELECT * FROM temp;
COMMIT;

如果您在 PHP/PDO 中使用它,您可能需要先选择正确的结果集。错误 HY000 就是一个指示。

$stmt = db -> prepare ($sql);
$stmt->execute ();
for ($i=0; $i<5; $i++)
    $stmt->nextRowset ();
$result = $stmt->fetchAll ();

关于mysql - 如何自动更新多行并选择它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42308005/

相关文章:

MySQL ORDER BY 多对多表优化

mysql - 从 Delphi XE3 连接到嵌入式 MySQL

mysql - xcode: Mysql 连接器库不能在 iphone5 (armv7s) 上工作,任何解决方案?

具有唯一值的 SQL Server COUNT 查询

mysql - 在 mysql 表中爆炸的字段

php - 检查选定的项目列表是否在另一个表中

php - MySQL 多个项目链接到一个 ID

sql - 有没有办法在 Vertica 中的现有表列上设置 AUTO_INCREMENT 属性?

php - MySQL:当对不在对列表中时更新(无主键)

mysql - 触发器中的多个查询