mysql - 执行存储过程失败时出错

标签 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 - Duplicate entry '1-XYZuser' for key 1

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

1062 - Duplicate entry '2-XYZuser' for key 1

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

提前致谢。

最佳答案

根据您粘贴的错误,

  1. 1062 - 重复条目“1-XYZuser” - 主键(groupid,用户名) - 它是否截断表并不重要。您可能会再次插入相同的数据。
  2. 您可能错误地使用了last_insert_id()

为什么useringroup_tbl中没有auto_increment

关于mysql - 执行存储过程失败时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30220995/

相关文章:

php - activerecord排序查询codeigniter

MySQL在存储过程中递增变量

php - 在 mysql/PHP 中执行存储过程时出现错误 "Commands out of sync, you can' t 立即运行命令

javascript - Azure cosmosDB 默认存储过程不起作用

mysql - 我可以在 jdbc 中调用一个存储过程,它使用 mysql 返回一个表吗?

mysql - 我在这个查询中的错误在哪里?,我认为它是正确的,但是它标记了一个错误

php - 如何根据来自mysql的动态信息设置css的宽度

php - 为什么 mysql_insert_id() 返回 0?

mysql - 从一个表中减去另一表的行

sql - Oracle SQL 存储过程调用与执行