我第一次尝试存储过程,我无法弄清楚我做错了什么。
以下是表格定义:
CREATE TABLE `answers` (
`anid` int(11) unsigned NOT NULL auto_increment,
`uid` int(11) NOT NULL,
`dtid` int(11) NOT NULL,
`answer` text NOT NULL,
PRIMARY KEY (`anid`),
KEY `uid` (`uid`),
KEY `dtid` (`dtid`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
anid
是主键,uid
是用户ID,dtid
是基准ID,answer
是提供的答案。
每当我得到给定数据(问题)和用户ID的新答案时,我想首先删除同一用户对同一问题的任何旧答案,然后插入新答案。
这是程序声明:
DELIMITER //
CREATE PROCEDURE new_answer(uid INT(11),dtid INT(11),answer TEXT)
BEGIN
DELETE FROM `answers` WHERE `uid` = uid AND `dtid` = dtid;
INSERT INTO `answers` SET `uid` = uid, `dtid` = dtid, `answer` = answer;
END//
但是,每当我CALL
new_answer
删除所有现有行,并且一个新答案现在是表中的唯一行。
希望这很简单,谢谢你的帮助。
答案 0 :(得分:4)
重命名参数:
DELIMITER //
CREATE PROCEDURE new_answer(p_uid INT(11),p_dtid INT(11),p_answer TEXT)
BEGIN
DELETE FROM `answers` WHERE `uid` = p_uid AND `dtid` = p_dtid;
INSERT INTO `answers` SET `uid` = p_uid, `dtid` = p_dtid, `answer` = p_answer;
END//
答案 1 :(得分:2)
您应该尝试命名不同于表列的过程参数。
无论如何,看起来你需要的只是一个INSERT ... ON DUPLICATE KEY UPDATE
查询。
答案 2 :(得分:1)
我不熟悉存储过程,但是将函数参数重命名为x和y而不是与列名相同呢?