我正在创建一个存储过程,以根据记录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子句一样。
有什么想法吗?
将存储过程中的参数命名为与列不同的名称。我猜这将返回一个错误:
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_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