表结构:
DROP TABLE IF EXISTS `Branch`;
CREATE TABLE IF NOT EXISTS `Branch`
(
  `Bid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `Bname` VARCHAR(20) NOT NULL,
  `Bname1` VARCHAR(20),
  `Bre` VARCHAR(200),
  CONSTRAINT FK_Branch_Bid PRIMARY KEY (`Bid`),
  CONSTRAINT UQ_Branch_Bname UNIQUE (`Bname`)
)ENGINE=InnoDB DEFAULT CHARSET=UTF8;
存储过程:
DELIMITER $$
DROP PROCEDURE IF EXISTS `procUpdateBranchByBid` $$
CREATE PROCEDURE `procUpdateBranchByBid`(Bid INT,Bname VARCHAR(20),Bname1 VARCHAR(20),Bre VARCHAR(200))
BEGIN
    UPDATE
          `Branch`
    SET
          `Bname` = Bname,
          `Bname1` = Bname1,
          `Bre` = Bre
    WHERE
          `Bid` = Bid;
END $$
DELIMITER;
表内数据:
1, 'bbb', '', ''
3, 'dd', 'dd', ''
4, 'ff', 'ff', ''
现在调用存储过程 call procUpdateBranchByBid(1,'ee','ees','');
出现经典问题:
Duplicate entry 'ee' for key 2;
请问大虾们,该如何解决?

解决方案 »

  1.   

    Duplicate   entry   'ee'   for   key   2; 很明显嘛。主键不能有重复。
      

  2.   

    对了,问题是在建立表时,我把Bname设置了唯一性约束,如果不加唯一约束,这个调用就没有问题,为什么一加约束,就不可以修改了呢?目前如果要求必须加约束,该如何解决?
      

  3.   

            SET
                        `Bname`   =   Bname,
                        `Bname1`   =   Bname1,
                        `Bre`   =   Bre
            WHERE
                        `Bid`   =   Bid; 
    你的变量最好重新命一下名字