MySQL – 用LIMIT更新查询

我想更新我的表中的行从1001开始到下一个1000。

我试着用下面的查询:

UPDATE `oltp_db`.`users` SET p_id = 3 LIMIT 1001, 1000 
  1. 这给我语法错误。 它是否正确? 我在这里犯了什么错误吗?
  2. 我们能以这种方式限制更新吗?

此外,我试图更新的行是具有数据types为INTEGER的列p_id的空值。 由于这个,我甚至无法使用以下查询进行更新:

 UPDATE `oltp_db`.`users` SET p_id = 3 WHERE p_id = null 
  1. 我的上述查询是否正确?
  2. 有什么可以做到这一点呢?

当处理null =不匹配空值时,可以使用IS NULLIS NOT NULL

 UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 WHERE panel_id IS NULL 

LIMIT可以与UPDATE一起使用,但只能使用row count

如果你想在MySQL中使用限制更新多行…使用这个

 UPDATE table_name SET name='test' WHERE id IN ( SELECT id FROM ( SELECT id FROM table_name ORDER BY id ASC LIMIT 0, 10 ) tmp ); 

我会build议一个两步查询

我假设你有一个自动增量主键,因为你说你的PK是(max + 1),这听起来像一个autio增量键的定义。
我打电话给PK id ,replace你所使用的PK。

1 – 找出列1000的主键号码。

 SELECT @id:= id FROM smartmeter_usage LIMIT 1 OFFSET 1000 

2 – 更新表格。

 UPDATE smartmeter_usage.users_reporting SET panel_id = 3 WHERE panel_id IS NULL AND id >= @id ORDER BY id LIMIT 1000 

请testing我是否没有发生错误; 您可能需要在某处添加或减去1。

 UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 LIMIT 1001, 1000 

这个查询是不正确的(或者至less我不知道在UPDATE查询中使用限制的可能方式),你应该在你的主键上放置一个where条件(假设你有一个auto_increment列作为你的主键,如果没有提供更多细节):

 UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 WHERE primary_key BETWEEN 1001 AND 2000 

对于第二个查询,你必须使用IS

 UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 WHERE panel_id is null 

编辑 – 如果您的primary_key是一个名为MAX + 1的列,您查询应该(反引号正确地在注释中说明):

 UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 WHERE `MAX+1` BETWEEN 1001 AND 2000 

要更新MAX1从1001到2000(包括1001和2000)的行,

你应该使用IS而不是=来比较NULL。

 UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 WHERE panel_id IS null 

MySQL中的LIMIT子句应用于更新时,不允许指定偏移量。

如果你打算限制你的UPDATE,你应该高度考虑使用ORDER BY ,因为否则它会更新表的顺序,这可能是不正确的。

但是,正如A所说,它只允许row_count的限制,而不是抵消。