MySQL 存储过程删除所有行而不是只删除一个

标签 mysql stored-procedures

我是第一次尝试存储过程,我不知道自己做错了什么。

这是表定义:

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/

相关文章:

sql-server-2005 - 如何计算 SQL Server 2005 中存储过程的 SIZE?

mysql - SQL 存储过程语法错误缺失 'end'

MySQL : When stored procedure parameter name is the same as table column name [continue]

mysql - 在 Order By 子句中使用 IN 表达式

php - 在电话前缀功能中填充区域字段

java - mysql 5.5 无效的转义序列 java

java - Java 中的 MySQL 模式解析器?

mysql - 如何将一个字段的总和与另一个字段的总和进行比较?

sql-server - 如何在Delphi代码中获取存储过程的SQL内容?

MySQL 过程导致语法错误