2014-01-18 21 views
0

我努力使高校分配一个简单的项目。在这种情况下,当我试图从mysql中的存储过程中删除记录时,该删除语句正在删除所有记录。在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,@消息);

当我试图仅仅从命令窗口中执行删除statment,则仅删除一个记录,但是当我执行调用语句,所有的记录都从我的表中删除。只需补充一下,busnumber是公交车的主要关键。我无法理解为什么。请尽快帮忙。

+0

我认为有缺少的代码,你的IF语句在哪里? –

回答

1

嘛,据我所看到的,busnumber总是等于busnumber ......你还不如写“1 = 1”。

改变变量名称 - 应为你工作。

+0

感谢它的工作.... – user976083

0

您正在运行

delete from fare where busnumber = busnumber; 

在表busnumber每一行都将等于本身,为此,他们将全部被删除。

尝试改变输入变量的东西,不列名冲突。

+0

'busnumber' ='busnumber'或1 = 1。无论哪种方式,它总会是真的。 –

1

两件事情。第一个delete不作为truncate table工作。它可能有相同的结果,但性能差别很大。 delete记录其所有交易; truncate table没有。

其次,进入命名参数的参数有特殊的前缀,如习惯:

CREATE DEFINER=`root`@`localhost` PROCEDURE 
      `removebus`(in in_busnumber int, out out_message varchar(255)) 
. . . 

如果你不进入这个习惯,你很可能会继续犯同样的错误了很长一段时间(至少,那是我的经历)。