MySQL – 用LIMIT更新查询
我想更新我的表中的行从1001开始到下一个1000。
我试着用下面的查询:
UPDATE `oltp_db`.`users` SET p_id = 3 LIMIT 1001, 1000
- 这给我语法错误。 它是否正确? 我在这里犯了什么错误吗?
- 我们能以这种方式限制更新吗?
此外,我试图更新的行是具有数据types为INTEGER的列p_id的空值。 由于这个,我甚至无法使用以下查询进行更新:
UPDATE `oltp_db`.`users` SET p_id = 3 WHERE p_id = null
- 我的上述查询是否正确?
- 有什么可以做到这一点呢?
当处理null =
不匹配空值时,可以使用IS NULL
或IS 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的限制,而不是抵消。