当我尝试更新记录时,出现错误#1062-键“ ID_UNIQUE”的条目重复

时间:2018-11-23 14:02:40

标签: mysql stored-procedures phpmyadmin

我正在使用以下存储过程来更新表:

DELIMITER $$
CREATE DEFINER=`developer`@`localhost` PROCEDURE `update_patient`(IN `patient_id` INT(11), IN `name` VARCHAR(45), IN `surname` VARCHAR(45), IN `middle_name` VARCHAR(45), IN `email` VARCHAR(45), IN `phone` VARCHAR(45), IN `mobile` VARCHAR(45), IN `address_id` INT(11), IN `address_no` VARCHAR(8), IN `ID` VARCHAR(45), IN `DOB` DATE)
    NO SQL
UPDATE
  patient
SET name  = name,
  surname = surname,
  middle_name = middle_name,
  email = email,
  phone = phone,
  mobile = mobile,
  address_id = address_id,
  address_no = address_no,
  ID = ID,
  DOB = DOB      
WHERE
  patient_id = patient_id
LIMIT 1;
END$$
DELIMITER ;

当我尝试通过phpmyadmin调用它时,出现错误:#1062 - Duplicate entry '844844' for key 'ID_UNIQUE'

844844是指ID字段。我在patient表中有此字段,我想更新患者的数据。但是,患者表的主键是patiend_id,而不是ID

您知道如何解决该错误吗?

1 个答案:

答案 0 :(得分:1)

问题是存储过程的输入参数与表中的列名相同。这导致行为模棱两可。

例如:在SET name = name中; MySQL如何解析其中一个是参数值,哪个是列名?

为了代码可读性和避免模棱两可的行为,我通常在IN的{​​{1}}参数前加上in_的{​​{1}}前缀。

OUT