当我尝试更新记录时,我收到错误 #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'

当尝试使用selfTracking时,我收到客户端错误

当我尝试上传包含大约 2000 条记录的 csv 文件时,我一直收到此错误消息

为啥我在尝试创建此表时不断收到外键错误? [复制]

(1062,“重复输入'0'用于键'PRIMARY'”)

在 My SQL 中不断收到外键约束失败消息