在mysql中使用存储过程删除删除整个表

时间:2014-10-14 21:38:29

标签: sql mysql-workbench sql-delete

我有一个存储过程,其中只有一行来删除给定条件的表中的记录。 当我使用' CALL storedprocname(' 2')'来调用storedproc时,它会删除表中的所有记录,即截断。我已独立运行删除语句,它工作正常,只删除指定的记录。我错过了什么吗? (我在macosx上使用mysqlworkbench)

DROP PROCEDURE IF EXISTS usp_DeleteCompany;
DELIMITER $$
CREATE PROCEDURE usp_DeleteCompany (IN CompanyId VARCHAR(3))
BEGIN
DELETE FROM Company WHERE CompanyId = (CAST(CompanyId AS UNSIGNED));
-- DELETE FROM Company WHERE CompanyId = (CAST('2' AS UNSIGNED))
END; $$

1 个答案:

答案 0 :(得分:1)

为什么不直接将参数作为unsigned传递给IN CompanyId UNSIGNED?那时不需要铸造它。

另外,请考虑将参数名称更改为与实际列名CompanyId不同的名称。

对我来说,好像您的delete查询位于

之下
DELETE FROM Company WHERE CompanyId = (CAST(CompanyId AS UNSIGNED));

转换为下面因为它将CompanyId视为表的确切列,而不是传递给过程的实际参数,因此最终删除所有行。

DELETE FROM Company WHERE CompanyId = CompanyId;

请考虑在查询

中为Cid等参数使用其他名称
CREATE PROCEDURE usp_DeleteCompany (IN Cid UNSIGNED)
BEGIN
DELETE FROM Company WHERE CompanyId = Cid;
END;