sra*_*l07 61 mysql limit sql-update
我想更新表格中的行,从1001开始到下一个1000.
我尝试了以下查询:
UPDATE `oltp_db`.`users` SET p_id = 3 LIMIT 1001, 1000
Run Code Online (Sandbox Code Playgroud)
此外,我尝试更新的行具有列p_id的Null值,该列具有数据类型INTEGER.由于这个原因,我甚至无法使用以下查询进行更新:
UPDATE `oltp_db`.`users` SET p_id = 3 WHERE p_id = null
Run Code Online (Sandbox Code Playgroud)
小智 112
如果要在MySQL中使用limit更新多行,可以使用以下结构:
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
)
Run Code Online (Sandbox Code Playgroud)
Sha*_*ngh 27
处理null时,=与null值不匹配.你可以使用IS NULL或IS NOT NULL
UPDATE `smartmeter_usage`.`users_reporting`
SET panel_id = 3 WHERE panel_id IS NULL
Run Code Online (Sandbox Code Playgroud)
LIMIT可以UPDATE和row count唯一一起使用
Jer*_*rry 11
除了上面的嵌套方式,你还可以在同一张表上完成LIMITusing的应用JOIN:
UPDATE `table_name`
INNER JOIN (SELECT `id` from `table_name` order by `id` limit 0,100) as t2 using (`id`)
SET `name` = 'test'
Run Code Online (Sandbox Code Playgroud)
根据我的经验,mysql 查询优化器对这种结构更满意。
我建议两步查询
我假设你有一个自动增量主键,因为你说你的PK是(max + 1),这听起来像是一个autioincrementing键的定义.
我打电话给PK id,替换你所谓的PK.
1 - 计算列1000的主键编号.
SELECT @id:= id FROM smartmeter_usage LIMIT 1 OFFSET 1000
Run Code Online (Sandbox Code Playgroud)
2 - 更新表格.
UPDATE smartmeter_usage.users_reporting SET panel_id = 3
WHERE panel_id IS NULL AND id >= @id
ORDER BY id
LIMIT 1000
Run Code Online (Sandbox Code Playgroud)
请测试我是否没有做出一个错误的错误; 您可能需要在某处添加或减去1.