我是第一次尝试存储过程,我不知道自己做错了什么。
这是表定义:
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
时,所有现有的行都会被删除,并且那个新的答案现在是表格中的唯一行。
希望这很简单,感谢您的帮助。
最佳答案
重命名您的参数:
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//
关于MySQL 存储过程删除所有行而不是只删除一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6739091/