有没有办法做到这一点?考虑到我有如下表:Mysql更改要插入复制密钥的值
id | value
----|------
1 | A
2 | B
如果我尝试插入,我得到Integrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY'
预期值(1, "C")
,考虑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”中的两个值。 – Newwt