Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql更改要在重复键上插入的值_Mysql - Fatal编程技术网

Mysql更改要在重复键上插入的值

Mysql更改要在重复键上插入的值,mysql,Mysql,有办法吗?考虑到我有下表: id | value ----|------ 1 | A 2 | B 如果我尝试插入值1,C,我会得到完整性约束冲突:1062重复项“1”作为键“PRIMARY”,正如预期的那样,考虑到id是唯一的主键。因此,我尝试在触发器上的AFTER insert中使用以下insert,并使用以下insert语法: INSERT INTO table VALUES (NEW.id, NEW.value) ON DUPLICATE KEY UPDATE NEW.id =

有办法吗?考虑到我有下表:

 id | value
----|------
 1  | A
 2  | B
如果我尝试插入值1,C,我会得到完整性约束冲突:1062重复项“1”作为键“PRIMARY”,正如预期的那样,考虑到id是唯一的主键。因此,我尝试在触发器上的AFTER insert中使用以下insert,并使用以下insert语法:

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;
//

正在执行调用集\u keysNEW.id,NEW.value;从现在开始,正确的方法是什么?

而不是直接执行INSERT INTO table, 您可以使用程序/功能执行此操作


对异常块下的重复键错误执行异常处理,增加键列并再次运行INSERT语句

使用自动增加键不是更简单吗?P.S.考虑使用重复的密钥更新,不插入新行,只需编辑旧的一行,因此,您1-A变成了500个A和1-C是lost@RobertoBisello会的,但我正在从另一个数据库导入数据,除了插入之外,无法修改原始数据库。如果另一个数据库给了我1-C,我应该能够插入它,并保留列值中的两个值。制作一个类似于从id=@id\u to\u insert的表中选择count*并制作一个If count=1的函数,会增加5000个工作量吗?很抱歉,我只是对mysql不太了解:/@Newwt-我看到您的答案的唯一问题是,在每次插入之前,我都会运行一个额外的查询,其中与异常处理一样,我只会对重复记录运行额外的查询…我告诉了自己一点,并且-我想-我按照您的建议做了。你介意检查一下我对这个问题的编辑,看看我是否做对了吗?谢谢你迄今为止的帮助@是的,在我看来是正确的。您需要CONTINUE处理程序,您正在使用它。我刚才注意到,如果我尝试插入一个id为1的表中没有任何内容,它会直接将其作为id+5000插入,而不存在重复项。是什么原因造成的?