2013-12-20 101 views
1

我使用下面的代碼創建了一個存儲過程;從MYSQL中刪除存儲程序

DELIMITER // 
CREATE PROCEDURE DeleteCandidate(IN `vid` integer, IN `aid` integer) 
    BEGIN 
    DELETE FROM `app_appointment` WHERE `vid` = vid and `aid` = aid; 
    DELETE FROM `app_declare` WHERE `vid` = vid and `aid` = aid; 
    END // 
DELIMITER ; 

當我調用過程Call DeleteCandidate(1, 1547),而不是刪除其中vid = vidaid = aid,它將刪除表中的所有數據。

任何人都可以幫助我解釋爲什麼會發生這種情況。當我在dbForge工作室調試它顯示了援助= 1547及VID = 1

非常感謝

+0

您是否考慮過CASCADE - 或簡單的JOIN? – Strawberry

回答

3

使用您的變量名稱不同的值。否則,數據庫會認爲您將列內容與自身進行比較(而不是列到變量),並且始終爲真

DELIMITER // 
CREATE PROCEDURE DeleteCandidate(IN `vidparam` integer, IN `aidparam` integer) 
    BEGIN 
    DELETE FROM `app_appointment` WHERE `vid` = vidparam and `aid` = aidparam; 
    DELETE FROM `app_declare` WHERE `vid` = vidparam and `aid` = aidparam; 
    END // 
DELIMITER ; 
+1

變量優先於表列名,MySQL正在測試變量'vid = vid',而不是表列。 – 2013-12-20 14:29:51