Mysql 如何更新SQL数据库表中的第n行?

Mysql 如何更新SQL数据库表中的第n行?,mysql,sql,Mysql,Sql,如何仅更新表中的第n行 例如,为了更新第二行,我尝试使用update和LIMIT,但它给了我一个错误 UPDATE database_table SET field = 'new_value' LIMIT 0, 1 有办法吗?您需要某种id,然后执行以下操作: UPDATE database_table SET field = 'new_value' WHERE id = 2 如果您有一个主键和一个要排序的列(以获取第n行),您可以执行以下操作: UPDATE database_tab

如何仅更新表中的第n行

例如,为了更新第二行,我尝试使用update和LIMIT,但它给了我一个错误

 UPDATE database_table
 SET field = 'new_value'
 LIMIT 0, 1

有办法吗?

您需要某种id,然后执行以下操作:

UPDATE database_table SET field = 'new_value' WHERE id = 2

如果您有一个主键和一个要排序的列(以获取第n行),您可以执行以下操作:

UPDATE database_table
SET field = 'new_value' 
WHERE primary_key IN (
    SELECT primary_key
    FROM database_table
    ORDER BY some_date_column 
    LIMIT n - 1, 1
)
编辑:我可能应该添加一条警告。这个答案在技术上可能是正确的,但使用它可能是错误的。我无法想象有太多的情况下,您实际上需要更新表的第n行。通常应仅基于主键更新表。如果多个用户(甚至是同一用户的多个会话)同时使用,则更新第n行可能会中断应用程序


真正的答案是,您可能应该更改代码以基于主键进行更新。

为什么不直接通过它的主键来引用它呢?这是一个选项,但我需要在代码中做很多更改才能这样工作。如果没有其他选项,我会这样做。第n行是相对的。您不知道该表将如何排序,除非您指定它是按添加时间排序的。否。看起来就是这样。当您从中检索行时,它们的顺序可能就是这样。不过,RDBMS通常不能保证这一点。如果您想要订单,您需要指定它。除非您明确提到排序,否则引用第n行是没有意义的。我将此代码用于一个只有我将要使用的应用程序,因此它将正常工作。但我将开始将代码更改为使用主键。谢谢!