尝试更新存储过程内部时出现MySQL错误代码1175
我正在创建一个存储过程,以根据记录id更新表记录。下面是我的代码(更新部分中的值仅为测试而硬编码): 当我调用以下程序时:尝试更新存储过程内部时出现MySQL错误代码1175,mysql,Mysql,我正在创建一个存储过程,以根据记录id更新表记录。下面是我的代码(更新部分中的值仅为测试而硬编码): 当我调用以下程序时: call paisanos_new.destination_update('zzz', 'a', 0, 'a', 2); 我得到以下错误: 错误代码:1175。您正在使用安全更新模式,并且您试图更新一个不带WHERE的表,该表使用键列禁用安全模式,请在“首选项”->“SQL编辑器”中切换该选项,然后重新连接 但是,当我只执行更新查询时,它工作得很好 我已尝试禁用SQL\u
call paisanos_new.destination_update('zzz', 'a', 0, 'a', 2);
我得到以下错误:
错误代码:1175。您正在使用安全更新模式,并且您试图更新一个不带WHERE的表,该表使用键列禁用安全模式,请在“首选项”->“SQL编辑器”中切换该选项,然后重新连接
但是,当我只执行更新查询时,它工作得很好
我已尝试禁用SQL\u SAFE\u更新,但当我运行存储过程时,它会更新我的所有表记录!就好像我没有主键的where子句一样
有什么想法吗?将存储过程中的参数命名为与列不同的名称。我猜这将返回一个错误:
CREATE DEFINER=`root`@`localhost` PROCEDURE `destination_update`(
IN in_destination_id char(3),
IN in_destination_name varchar(250),
IN in_is_office tinyint(1),
IN in_address varchar(250),
IN in_status_id int(11)
)
BEGIN
UPDATE `paisanos_new`.`destinations` d
SET `destination_name` = 'b',
`is_office` = 0,
`address` = 'b',
`status_id` = 2
WHERE d.`destination_id` = 'zzz';
END;
也就是说,
WHERE
子句中的destination\u id
可能引用的是输入参数,而不是列(我猜它不存在)。仅执行更新查询时,它会起作用,因为它会在名为destination\u id的表中找到列
但是,在过程内部,考虑的目的地\u id是参数表中的一个,因此您的查询实际上如下所示:
UPDATE ... WHERE 'zzz' = 'zzz';
Wich与执行WHERE true相同,因此它会更新所有行。谢谢,这正是问题所在,没有错误我知道:谢谢你的回答,这就是问题所在。当然我对它投了更高的票,但遗憾的是,我在这里没有声誉,所以它不算你
UPDATE ... WHERE 'zzz' = 'zzz';