2015-05-13 33 views
0

我在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-XYZuser' 關鍵1

和每次它附加到用戶名的數字都會增加 像這樣

1062 - 重複項 '2-XYZuser' 關鍵1

所以請,如果有人可以給我方向是什麼,我做錯了,

在此先感謝。

+0

您可能在這些表格中有一個唯一的鍵。 – Uueerdo

+0

@Uueerdo我截斷了所有的表仍然是相同的錯誤! – yogi970

+0

第二個查詢應該給你一個不同的錯誤。 'createdon'不能以包含在值列表中的方式存在。 – Uueerdo

回答

0

根據您粘貼錯誤,

  1. 1062 - Duplicate entry '1-XYZuser' - PRIMARY KEY(groupidusername - 如果您截斷表與否沒關係。您可能會再次插入相同的數據。
  2. 您可能會錯誤地使用last_insert_id()

爲什麼useringroup_tbl中沒有auto_increment