在 MySQL 中,删除似乎正在截断整个表
Posted
技术标签:
【中文标题】在 MySQL 中,删除似乎正在截断整个表【英文标题】:In MySQL, delete seems to be truncating the whole table 【发布时间】:2014-02-07 23:04:28 【问题描述】:我正在尝试为大学作业制作一个简单的项目。在那,当我试图从 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
我正在像call removebus(1,@message);
一样执行。
当我试图只从命令窗口执行删除语句时,它只删除一条记录,但是当我执行调用语句时,所有记录都从我的表中删除。补充一下,busnumber 是总线表的主键。我无法理解为什么。
【问题讨论】:
我认为缺少代码,您的 IF 语句在哪里?? 【参考方案1】:嗯,据我所知,busnumber 总是等于 busnumber... 你不妨写“1 = 1”。
更改变量名称 - 这应该适合您。
【讨论】:
【参考方案2】:你正在跑步
delete from fare where busnumber = busnumber;
因为表 busnumber 中的每一行都等于自己,因此它们都将被删除。
尝试将输入变量更改为不与列名冲突的内容。
【讨论】:
busnumber
= busnumber
或 1 = 1。无论哪种方式,它总是正确的。【参考方案3】:
两件事。首先delete
不是truncate table
。它可能具有相同的结果,但性能却大不相同。 delete
记录其所有交易; truncate table
没有。
第二,养成使用特殊前缀命名参数参数的习惯,例如:
CREATE DEFINER=`root`@`localhost` PROCEDURE
`removebus`(in in_busnumber int, out out_message varchar(255))
. . .
如果你不养成这个习惯,你很可能会在很长一段时间内继续犯同样的错误(至少,这是我的经验)。
【讨论】:
以上是关于在 MySQL 中,删除似乎正在截断整个表的主要内容,如果未能解决你的问题,请参考以下文章