错误代码:1062密钥'PRIMARY'重复输入

时间:2014-03-10 12:59:06

标签: mysql sql stored-procedures

我经常收到错误代码1062:重复输入。 第一行插入,但随后它在同一个ID上失败。 所以每次我点击执行它会增加:1466,1467,1468,1469。 并且每次输入相同的记录,所以我假设自动增量仅适用于第一次迭代。

表:

'entity':  

CREATE TABLE `entity` (  
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,  
  `reg_num` varchar(45) NOT NULL,  
  `enterprise_id` int(11) DEFAULT NULL,  
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1474 DEFAULT CHARSET=latin1 COMMENT=\'Comment'

存储过程:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `tp_to_entityPROC`()
    DETERMINISTIC
    COMMENT 'stored'
BEGIN
    DECLARE done BOOLEAN DEFAULT 0;
    DECLARE Tid INT;
    DECLARE Tt_name TEXT;

    DECLARE allt CURSOR FOR 
                SELECT training_provider_id, training_provider_name 
                FROM training_providers;

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;

    OPEN allt;
    read_loop: LOOP
        IF done THEN
             LEAVE read_loop;
        END IF;

        FETCH allt INTO Tid, Tt_name;

        SET @id = 0;
        SET @t_name = 0;
        SET @id = Tid;
        SET @t_name = Tt_name;
        SET @empty = '';

        if (@id != 0) THEN
            INSERT INTO entity (name)
            VALUES (@t_name);
            SET @my_id = LAST_INSERT_ID();

            IF @my_id != 0 THEN
                UPDATE training_awarded_providers 
                SET training_awarded_provider_id = @my_id
                WHERE training_awarded_provider_id = @id;
            END IF;
        END IF;

    END LOOP;
    CLOSE allt; 

END

1 个答案:

答案 0 :(得分:0)

不确定duplicate entry的确切错误,但您发布的代码不起作用。

您的表架构

CREATE TABLE `entity` (  
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,  
  `reg_num` varchar(45) NOT NULL <-- Here it's non null column

在您的商店程序中,您尝试将null插入reg_num列,这将永远不会成功

if (@id != 0) THEN
INSERT INTO entity (name)
VALUES (@t_name);