【发布时间】:2017-10-19 10:47:17
【问题描述】:
有办法吗?考虑到我有下表:
id | value
----|------
1 | A
2 | B
如果我尝试插入值(1, "C"),我会得到Integrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY',因为id 是唯一的主键。因此,我尝试使用以下插入语法在 AFTER INSERT ON 触发器中使用以下插入:
INSERT INTO table VALUES (NEW.id, NEW.value)
ON DUPLICATE KEY UPDATE NEW.id = NEW.id + 5000;
它会删除重复键错误,但不会插入重复键。
我按照瑜伽士的建议做了一个程序。这是它的样子:
DELIMITER //
CREATE PROCEDURE set_keys(IN id INT, IN value char(1))
BEGIN
DECLARE CONTINUE HANDLER FOR 1062
SELECT concat('Duplicate keys detected: ',id,', ',value) AS msg;
INSERT INTO tests (id, value) VALUES(id + 5000, value);
END;
//
从现在开始做CALL set_keys(NEW.id, NEW.value); 是正确的做法吗?
【问题讨论】:
-
使用自增键不是更简单吗?附:考虑到使用 ON DUPLICATE KEY UPDATE 您不会插入新行,只需编辑旧行,因此您的 1-A 变为 5001-A 并且 1-C 丢失
-
@RobertoBisello 会的,但是我正在从另一个数据库导入数据,除了插入之外,无法修改原始数据库。如果另一个数据库给了我 1-C,我应该能够插入它并保留列
value中的两个值。
标签: mysql