当前位置: 首页 > 知识库问答 >
问题:

尝试更新存储过程内部时出现MySQL错误代码1175

锺高翰
2023-03-14

我正在创建一个存储过程,以根据记录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。您使用的是安全更新模式,并且您试图更新一个没有使用键列禁用安全模式的表,请在“首选项”中切换该选项-

然而,当我只执行更新查询时,它工作正常。

我已尝试禁用SQL\u SAFE\u更新,但当我运行存储过程时,它会更新我的所有表记录!就好像我没有主键的where子句一样。

有什么想法吗?

共有2个答案

茹轩昂
2023-03-14

存储过程中的参数命名为与列不同的名称。我猜这将返回一个错误:

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可能引用的是输入参数,而不是列(我猜它不存在)。

欧阳炜
2023-03-14

当您只执行更新查询时,它会工作,因为它在名为destination_id的表中找到了列。

但是,在过程内部,考虑的目的地id是参数表中的id,因此您的查询实际上如下所示:

UPDATE ... WHERE 'zzz' = 'zzz';

Wich与WHERE true相同,因此它会更新所有行。

 类似资料:
  • UPDATE IDConfig设置女性ID=女性ID 1; 获取错误,如您正在使用安全更新模式,并且您试图更新一个没有使用KEY列的WHERE的表要禁用安全模式,请在首选项中切换选项-

  • 问题内容: 我尝试通过bash脚本执行此命令,但出现以下错误: 错误stacktrace: {“错误”:“ IndexPrimaryShardNotAllocatedException [[my_index]主要未分配后api]”,“状态”:409} {“错误”:“ ElasticSearchIllegalArgumentException [无法更新非动态设置[[index.analysis.f

  • 我使用以下代码导入存储过程: 但当我在我的服务器上执行它时,会出现以下错误: 1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以在'PROCEDURE附近使用正确的语法(INVARCHAR(255),ININT(11),IN'etu'在第6行 我不知道为什么会出现这个错误 表的结构: 创建人: MySQL版本:5.6.17-MySQL社区服务器(GPL) 谢谢你的帮助!

  • 在eclipse中,当使用右键单击Project->Maven->Update project为maven更新project时,是否有人面临以下异常。 对话框1=>“更新Maven项目”期间出现内部错误 对话框2=>发生堆栈溢出错误。建议您退出工作台。...是否退出工作台? eclipse bug团队报告了相同的情况:https://bugs.eclipse.org/bugs/show_bug.c

  • 我想使用phpmyadmin在MySQL数据库中进行存储过程。 几分钟后,我在“创建过程”对话框中键入并按下GO,我的语法出现了错误。 我在谷歌上搜索过哪一个是错的,但仍然没有找到。请任何人给我一些建议如何解决这个问题。 这是我的MySQL存储过程查询。 我有这样的错误 处理您的请求: 以下查询失败:"CREATE DEFINER=@PROCEDURE(INBIT(1), ININT, INDAT

  • 我在尝试更新我的Eclipse时出错! 以下是在“安装下载0”期间发生内部错误的错误日志 Java . lang . illegalargumentexception:比较法违反了它的通用契约!at Java . util . comparabletimsort . merge hi(comparabletimsort . Java:835)at Java . util . comparablet