我正在努力为大学任务制作一个简单的项目。在那里,当我试图从mysql中的存储过程中删除一条记录时,该删除语句正在删除所有记录。
以下是代码:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE
`removebus`(in busnumber int,out message varchar(255))
BEGIN
delete from fare where busnumber = busnumber;
delete from bus where busnumber = busnumber;
set message = 'success';
else
set message = 'not found';
end if;
END
我正在执行调用removebus(1,@ message);
当我尝试仅从命令窗口执行删除语句时,它只删除一条记录,但是当我执行call语句时,所有记录都从我的表中删除。只是添加,busnumber是总线表的主键。我无法理解为什么。请尽快帮助。
答案 0 :(得分:1)
嗯,据我所知,busnumber总是等于busnumber ...你也可以写“1 = 1”。
更改变量名称 - 这应该适合您。
答案 1 :(得分:1)
两件事。第一个delete
无效truncate table
。它可能会有相同的结果,但性能却大不相同。 delete
记录其所有交易; truncate table
没有。
其次,养成使用特殊前缀命名参数参数的习惯,例如:
CREATE DEFINER=`root`@`localhost` PROCEDURE
`removebus`(in in_busnumber int, out out_message varchar(255))
. . .
如果你没有养成这种习惯,你很可能会长时间犯同样的错误(至少,这是我的经历)。
答案 2 :(得分:0)
您正在运行
delete from fare where busnumber = busnumber;
对于表中的每一行,busnumber将等于自己,因此它们都将被删除。
尝试将输入变量更改为不与列名冲突的内容。