mysql 刪除語句


DELETE FROM `db`.`TABLE` WHERE `A`='a' AND `B`='b';

這是一個簡單的刪除語句,單獨執行這個語句不會報錯,但是將這個語句放到存儲過程中運行,執行也不會報錯,但是有可能會刪掉其他的數據

CREATE DEFINER=`usr`@`localhost` PROCEDURE `clear`(IN `a` VARCHAR(50), IN `b` VARCHAR(20))
BEGIN
DECLARE flag TINYINT DEFAULT '1'; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN SELECT 0 INTO flag; END; START TRANSACTION; DELETE FROM `db`.`TABLE` WHERE `A`=a AND `B`=b; IF flag=0 THEN ROLLBACK; ELSE COMMIT; END IF; SELECT flag; END

這個存儲過程在執行的時候有可能會將滿足`A`=a 或 `B`=b其中一個條件的數據全部刪除,而不是刪除同時滿足兩個條件的數據,具體為什么會出現這種問題我不清楚。

經過各種分析和嘗試,發現如果在字段名前面帶上表名就可以准確的刪除想要刪除的數據

 DELETE FROM `db`.`TABLE` WHERE `TABLE`.`A`='a' AND `TABLE`.`B`='b';

將刪除語句改成這樣就不會出錯。

雖然字段名前面不帶表名不一定會出錯,但是帶表名是肯定不會出錯的,而且這樣寫是個好習慣

補充:找到原因了,存儲過程傳入參數如果與表字段名相同就可能出現上述錯誤,修改存儲過程參數名或者字段名前面帶上表名就不會出錯了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM