首页 > 解决方案 > 没有主键的 MySQL 更新

问题描述

我正在寻找如何在选择上更新像 LIMIT 2,2 这样的行

有一个小例子:

col1 | col2
 5      10
 5      10
 5      10

我想像这样更新第二行:

col1 | col2
 5      10
 1      10
 5      10

我知道行号,所以我想要这样的东西:

UPDATE table
SET col1 = 1
WHERE col1 = 5
LIMIT 2, 1

我们不能使用限制,但我知道这是可以实现的,HeidiSQL 可以做到,我正试图弄清楚他们是怎么做的

谢谢

标签: mysqlsql

解决方案


如果您需要更新特定行,则需要一列或多列可用作主键。

SQL 对行集起作用,您只能更新可以识别为属于该集的行。

例如,您可以

UPDATE Customers SET Preferred=True WHERE TotalSales > 1000

这将为销售额超过 1000 的任何客户设置“首选”标志。这可能是一个客户或一百万或没有客户。

进行您询问的单行更新的唯一方法是有某种方法来识别行。在许多数据库服务器中,您可以配置一个 IDENTITY 或 SEQUENCE 列,它们将为每一行自动分配一个唯一 ID。

您可以使用 IDENTITY 属性集添加一个 ID 列,这将使您:

ID | col1 | col2
 1    5     10
 2    5     10
 3    5     10

因此,更新该特定行将是:

UPDATE table SET col1 = 1 WHERE ID = 2

推荐阅读