用何处删除。过程将删除所有内容。为什么?

时间:2018-06-22 17:08:36

标签: mysql sql jdbc

在测试环境中,我创建了以下过程:-

CREATE DEFINER=`SC1`@`%` PROCEDURE `sc1_procedure_wipe_perms`(IN UserUUID char(36))
BEGIN
    DELETE FROM subAccountPermissions WHERE `UserUUID` = UserUUID;
END

足够纯真的吧? 我从Java调用它的方式如下:-

connection = ConnectionMgr.getConnectionToSc1();
rmStatement = connection.prepareStatement("CALL sc1_procedure_wipe_perms(?)");
rmStatement.setString(1, UserUUID);
rmStatement.execute();

它将删除所有内容。我不确定这是怎么回事?

1 个答案:

答案 0 :(得分:2)

问题在于过程参数UserUUID与表列UserUUID之间的歧义。 MySQL编译器将忽略该参数,并在条件的两边使用table列,这意味着它将对所有行解析为true

您需要消除名称的歧义,并为过程参数使用其他名称,例如UserUUIDToDelete