2014-01-18 22 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)) 
. . . 

如果你不進入這個習慣,你很可能會繼續犯同樣的錯誤了很長一段時間(至少,那是我的經歷)。