MySQL LAST_INSERT_ID在存储过程中返回0,但未手动执行

MySQL LAST_INSERT_ID在存储过程中返回0,但未手动执行,mysql,Mysql,更新2:如果我手动将下面的执行代码示例替换为实际要执行的SQL代码,它工作得非常好,这告诉我准备、执行和取消分配准备工作已经很累了 更新1:实际上,似乎每个存储过程都已停止工作,例如插入时始终返回0。非常奇怪的是,当我手动执行insert时,我很好地恢复了索引。但当它通过存储过程执行时,它总是0。唯一改变的是我重新启动了我的系统。就这样。注意,这是我的本地127.0.0.1 MySQL安装。为什么手动执行INSERT会返回最后一个INSERT ID,但完全相同INSERT的存储过程会失败?我没有

更新2:如果我手动将下面的执行代码示例替换为实际要执行的SQL代码,它工作得非常好,这告诉我准备、执行和取消分配准备工作已经很累了


更新1:实际上,似乎每个存储过程都已停止工作,例如插入时始终返回0。非常奇怪的是,当我手动执行insert时,我很好地恢复了索引。但当它通过存储过程执行时,它总是0。唯一改变的是我重新启动了我的系统。就这样。注意,这是我的本地127.0.0.1 MySQL安装。为什么手动执行INSERT会返回最后一个INSERT ID,但完全相同INSERT的存储过程会失败?我没有在SPs中使用提交/回滚,也没有更改提交的默认系统设置

这真是令人头痛。我有一个庞大而复杂的存储过程,它从动态JSON字段数据构建SQL插入。在我将多个更新合并到一个SP中以支持事务回滚之前,它一直工作得很好,但我还没有将任何代码放入其中

执行SQL select语句的代码是:

SET @mysql := var_sql_insert;
PREPARE SQLStatement1 FROM @mysql;
EXECUTE SQLStatement1;
DEALLOCATE PREPARE SQLStatement1;
SET var_company_main_id = LAST_INSERT_ID();
下面是正在执行的SQL代码:

INSERT INTO company_main  (company_owner_account_ref_id,company_name,company_industry_ref_id,company_size_c,company_type_c,company_date_founded) VALUES (1,'TestCompany',2,1,1,'2009/05/06')
问题是每次我在存储过程中执行SQL语句时,LAST_INSERT_ID都返回0,但是如果我手动执行它,LAST_INSERT_ID返回的索引很好。请注意,我插入的表有一个正确定义的PK自动增量索引,因此这不是问题所在,它似乎是0结果的1原因

更令人恼火的是,这段完全相同的代码以前工作得非常好——它没有改变——我所做的唯一一件事就是将它放在一个更大的存储过程中,并在开始处添加一个标签,因为我执行了错误保留

当我遍历代码时,它会完美地执行;这只是最后一次插入,即使记录与递增的ID/索引一起插入时也始终返回0


有什么想法吗?

所以这个问题似乎与dbForge Studio 2019 for MySQL有关。我相信这是在IDE中创建实例调用,可以在级联调用中抛出最后一个插入ID。一旦我能够跟踪并解决一个错误,该错误返回了一个坏的索引,但与一个完全不相关的插入没有任何关系,一切都恢复正常。所以这个问题似乎是由IDE引起的。因为dbForge中内置的实际调试器是问题的一部分,所以花了大约3个小时才弄清楚。叹气

请将您的问题包括在内,这不会按预期为您提供生成的id。实际上,似乎每个存储过程都已停止工作,例如插入时始终返回0。非常奇怪的是,当我手动执行insert时,我很好地恢复了索引。但当它通过存储过程执行时,它总是0。唯一改变的是我重新启动了我的系统。就这样。注意,这是我的本地127.0.0.1 MySQL安装。手动执行INSERT会返回最后一个INSERT ID,但完全相同INSERT的存储过程会失败的原因是什么?听起来像是会话范围问题。为什么不简单地将存储过程中最后一个\u INSERT\u ID作为OUT参数返回呢。它已经工作了好几个星期了。问题是无论插入什么,它现在在任何存储过程中都始终返回0。同样的代码已经运行了好几个星期——我提到的唯一区别是我重新启动了我的系统。是否有任何原因导致最后一个\u INSERT \u ID在SP中始终返回0,但在不使用SP中的事务的情况下手动执行?这就像重新启动关闭了某些东西一样。@Floobinator请将您的问题包含在表结构和存储过程中,作为问题的答案。还要添加有关如何调用存储过程以及如何读取最后一个\u INSERT\u ID值的语句。有关SQL相关问题,请参见。