执行存储过程时出错失败

时间:2015-05-13 16:56:31

标签: mysql stored-procedures

我在mysql数据库中创建了一个存储过程,它会触发多个插入状态。

如下图所示:

DELIMITER //

DROP PROCEDURE IF EXISTS insert_user_group_info
//
CREATE PROCEDURE insert_group_user_info(groupname varchar(50), groupdesc varchar(100), 
createddate varchar(50), createdby varchar(100))
BEGIN
   DECLARE RETURN_VAL INT UNSIGNED DEFAULT 0;
   DECLARE NEWGROUPID INT UNSIGNED DEFAULT 0;
START TRANSACTION;

   Insert into group_tbl (`groupname`,
   `groupdesc`,
   `groupusers`,
   `createdon`,
   `createdby`,
   `groupstatus`) 
    values
   (groupname,
    groupdesc,
    '1',
    createddate,
    createdby,
    '1');

    SET NEWGROUPID = LAST_INSERT_ID();

   INSERT INTO useringroup_tbl
   ( groupid,
     username,
     regdate,
     joindate,
     userstatus,
     roleid)
   VALUES
   ( NEWGROUPID,
     createdby,
     createddate,
     createddate,
     '1',
     '1');

     INSERT INTO userinrole_tbl
   ( username,
     groupid,
     roleid)
   VALUES
   (createdby, 
    NEWGROUPID,
    '1');

   SET RETURN_VAL = LAST_INSERT_ID();

   SELECT RETURN_VAL;

COMMIT;
END//
DELIMITER ;

表的架构如下 表1 group_tbl

CREATE TABLE `group_tbl` 
(
  `groupid` int(11) NOT NULL auto_increment,
  `groupname` varchar(50) NOT NULL,
  `groupdesc` varchar(100) NOT NULL,
  `groupusers` int(11) NOT NULL,
  `createdon` datetime NOT NULL,
  `createdby` varchar(50) NOT NULL,
  `groupstatus` tinyint(4) NOT NULL,
  PRIMARY KEY  (`groupid`)
);

表2 useringroup_tbl

CREATE TABLE IF NOT EXISTS `useringroup_tbl` 
(
  `groupid` int(11) NOT NULL,
  `username` varchar(50) NOT NULL,
  `regdate` datetime NOT NULL,
  `joindate` datetime NOT NULL default '0000-00-00 00:00:00',
  `userstatus` tinyint(4) NOT NULL,
  `closingdate` datetime NOT NULL default '0000-00-00 00:00:00',
  `roleid` int(11) NOT NULL default '0',
  PRIMARY KEY  (`groupid`,`username`)
);

表3 userinrole_tbl

CREATE TABLE IF NOT EXISTS `userinrole_tbl` 
(
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(50) NOT NULL,
  `groupid` int(11) NOT NULL,
  `roleid` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
);

通过此声明执行此过程

call insert_group_user_info('test name','test description','2015-05-10 12:10:12','XYZuser')

我收到错误

  

1062 - 重复录入&1 39-ZZZ'对于关键1

每次添加到用户名的数字都会增加 像这样

  

1062 - 重复输入' 2-XYZuser'对于关键1

所以,如果有人能指导我做错了什么,

提前致谢。

1 个答案:

答案 0 :(得分:0)

根据您粘贴的错误,

  1. 1062 - Duplicate entry '1-XYZuser' - PRIMARY KEY(groupidusername - 如果您截断表格无关紧要。您可能会再次插入相同的数据。
  2. 您可能错误地使用 last_insert_id()
  3. 为什么auto_increment中没有useringroup_tbl