如何在SP中使用ON DUPLICATE KEY UPDATE从PINTO获取已创建/更新的索引列表[MySQL 8.0.36]

7qhs6swi  于 5个月前  发布在  Mysql
关注(0)|答案(1)|浏览(54)

当使用带有ON DUPLICATE KEY的EXPLINTO时,如何获得创建或更新的记录ID的列表-在执行EXPLINTO的存储过程中?
例如,这样的动作可以更新记录5、23、91,并创建92、93、94、95。
ROW_Rows()和LAST_Rows_ID()不足以做到这一点,我没有看到MySQL可用的函数与mysql_affected_rows()相同。
那么,如何获得在此场景中添加和更新的行ID的列表呢?

vlf7wbxs

vlf7wbxs1#

您可以使用用户定义的变量和触发器获取所需的数据。
示例代码:

CREATE TABLE test (
  id INT AUTO_INCREMENT PRIMARY KEY,
  val INT
);
CREATE TRIGGER tr_ins -- save id of the inserted row
AFTER INSERT ON test
FOR EACH ROW
SET @inserted := CONCAT_WS(',', @inserted, NEW.id);
CREATE TRIGGER tr_upd -- save id of the updated row
AFTER UPDATE ON test
FOR EACH ROW
SET @updated := CONCAT_WS(',', @updated, NEW.id);

x

-- clear user-defined variables which will collect the list of effected rows
SET @inserted := NULL;
SET @updated := NULL;
INSERT INTO test VALUES
(1,1),    -- explicit insert
(NULL,2), -- autogenerated insert
(NULL,3), -- autogenerated insert
(2,4),    -- update
(1,5),    -- update
(2,6),    -- update
(NULL,7), -- autogenerated insert
(5,8),    -- explicit insert
(3,9)     -- update
ON DUPLICATE KEY UPDATE val = VALUES(val);
SELECT * FROM test;
-- see the lists of inserted/updated row's id values
SELECT @inserted, @updated;
Records: 9  Duplicates: 4  Warnings: 1

的数据
| ID|瓦尔|
| --|--|
| 1 | 5 |
| 2 | 6 |
| 3 | 9 |
| 4 | 7 |
| 5 | 8 |
| @插入|@更新|
| --|--|
| 一二三四五|二、一、二、三|
fiddle

相关问题