【发布时间】:2017-05-15 01:46:22
【问题描述】:
我正在创建一个存储过程来根据记录 ID 更新表记录。这是我的代码(更新部分中的值是硬编码的,仅用于测试):
CREATE DEFINER=`root`@`localhost` PROCEDURE `destination_update`(
IN destination_id char(3),
IN destination_name varchar(250),
IN is_office tinyint(1),
IN address varchar(250),
IN status_id int(11))
BEGIN
UPDATE `paisanos_new`.`destinations`
SET
`destination_name` = 'b',
`is_office` = 0,
`address` = 'b',
`status_id` = 2
WHERE `destination_id` = 'zzz';
END
当我调用程序时:
call paisanos_new.destination_update('zzz', 'a', 0, 'a', 2);
我收到以下错误:
错误代码:1175。您正在使用安全更新模式,并且您尝试更新没有使用 KEY 列的 WHERE 的表 要禁用安全模式,请切换 Preferences -> SQL Editor 中的选项并重新连接。
但是,当我只执行更新查询时,它工作正常。
我尝试禁用 SQL_SAFE_UPDATES,但是当我运行存储过程时,它会更新我的所有表记录!就好像我确实没有带主键的 where 子句一样。
有什么想法吗?
【问题讨论】:
标签: mysql