当我尝试更新记录时,我收到错误 #1062 - 键“ID_UNIQUE”的重复条目
Posted
技术标签:
【中文标题】当我尝试更新记录时,我收到错误 #1062 - 键“ID_UNIQUE”的重复条目【英文标题】:When I'm trying to update a record I get error #1062 - Duplicate entry for key 'ID_UNIQUE' 【发布时间】:2019-04-26 03:37:00 【问题描述】:我正在使用以下存储过程来更新表:
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】:问题是存储过程的输入参数与表中的列名相同。这会导致模棱两可的行为。
例如:在 SET name = name
中; mysql如何解析其中哪一项是参数值,哪一项是列名?
我通常在 IN
参数前加上 in_
和 OUT
加上 out_
以提高代码可读性并避免模棱两可的行为。
DELIMITER $$
CREATE definer=`developer`@`localhost`
PROCEDURE `update_patient`(IN `in_patient_id` INT(11),
IN `in_name` VARCHAR(45),
IN `in_surname` VARCHAR(45),
IN `in_middle_name` VARCHAR(45),
IN `in_email` VARCHAR(45),
IN `in_phone` VARCHAR(45),
IN `in_mobile` VARCHAR(45),
IN `in_address_id` INT(11),
IN `in_address_no` VARCHAR(8),
IN `in_id` VARCHAR(45),
IN `in_dob` date)
NO SQL
UPDATE patient
SET name = in_name,
surname = in_surname,
middle_name = in_middle_name,
email = in_email,
phone = in_phone,
mobile = in_mobile,
address_id = in_address_id,
address_no = in_address_no,
id = in_id,
dob = in_dob
WHERE patient_id = in_patient_id
LIMIT 1;
END$$
DELIMITER ;
【讨论】:
以上是关于当我尝试更新记录时,我收到错误 #1062 - 键“ID_UNIQUE”的重复条目的主要内容,如果未能解决你的问题,请参考以下文章
[23000][1062] 键 'PRIMARY' 的重复条目 '0'