在mysql中,删除工作为截断

时间:2014-01-18 15:08:24

标签: mysql delete-row

我正在努力为大学任务制作一个简单的项目。在那里,当我试图从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是总线表的主键。我无法理解为什么。请尽快帮助。

3 个答案:

答案 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将等于自己,因此它们都将被删除。

尝试将输入变量更改为不与列名冲突的内容。