我正在使用MySQL 5.6,我有这个问题。 我正在尝试改进此案件的批量更新策略。MySQL:批量更新表
我有一张表,名为reserved_ids,由外部公司提供,用于为其发票分配唯一的ID。没有其他办法可以做到这一点;我无法使用auto_increment字段或模拟序列。
我有这样的PL伪代码,使这项任务:
START TRANSACTION;
OPEN invoice_cursor;
read_loop: LOOP
FETCH invoice_cursor INTO internalID;
IF done THEN
LEAVE read_loop;
END IF;
SELECT MIN(SECUENCIAL)
INTO v_secuencial
FROM RESERVED_IDS
WHERE COUNTRY_CODE = p_country_id AND INVOICE_TYPE = p_invoice_type;
DELETE FROM RESERVED_IDS WHERE SECUENCIAL = v_secuencial;
UPDATE MY_INVOICE SET RESERVED_ID = v_secuencial WHERE INVOICE_ID = internalID;
END LOOP read_loop;
CLOSE invoice_cursor;
COMMIT;
所以,这是一个需要 - 删除 - 分配,然后采取下一个 - 删除 - 分配...等等。
这可行,但速度非常慢。 我不知道是否有任何方法以更快的速度完成这项任务。 我正在寻找类似于的内容INSERT INTO SELECT ...,但带有UPDATE语句,可以直接分配1000或2000个ID,并且不会一个接一个。
请任何建议对我很有帮助。 非常感谢。
编辑1:我已经加入WHERE子句细节,因为它是由用户@vmachan要求。在UPDATE ... INVOICE子句中,我没有按照其他标准过滤,因为我有直接和索引的发票ID,我想更新它。谢谢
你可以发布'WHERE'条件从'RESERVED_IDS'选择并更新'MY_INVOICE'表..? – vmachan
@vmachan,谢谢你的回答。我已经按照你的要求添加了SQL细节。我希望编辑的问题比以前更清楚。再次感谢。 –