使用insert_last_insert_ID在mysql数据库中插入行

时间:2016-05-01 10:53:33

标签: c# mysql

我正在创建一个网站,用户应该能够通过表单输入数据。 因此,我需要在第一个表中输入一行,并在第二个表中插入一行后,使用第一个表中的vo2testID作为自动递增的外键。

table 2 table 1

我的问题是当我尝试使用此查询在第二个表中插入内容时:

INSERT INTO vo2phases_tb (VO2_TestID, Phase, Time, Intensity, RER, Borgscale, Pulse) 
VALUES(LAST_INSERT_ID(),'1', '12:00:00', '10', '23.5', '5', '110');

我收到此错误:

enter image description here

我已经四处寻找解决方案,但我找到的唯一一个是禁用外键检查,我不想这样做。

2 个答案:

答案 0 :(得分:0)

请参阅mysql的文档:

  

没有参数,LAST_INSERT_ID()返回一个BIGINT UNSIGNED(64位)值,表示由于最近执行的INSERT语句而成功为AUTO_INCREMENT列插入的第一个自动生成的值。

LAST_INSERT_ID在全球范围内运作。鉴于命名,我认为每个vo2phases_tb多次插入VO2_TestID。因此,插入查询将在第二个插入时失败,因为最近插入的插入查询不是有效的外键。

解决方案是在插入后立即提取VO2_TestID并将其向下移动。如果同时执行多个测试并消除并发问题,这也很有用。

答案 1 :(得分:0)

您应该尝试在用户定义的变量中存储LAST_INSERT_ID()的值。例如。

 INSERT INTO vo2test_tb (blah blah blah) VALUES (blah blah blah);
 SET @testId := LAST_INSERT_ID();
 INSERT INTO vo2phases_tb 
             (VO2_TestID, Phase, Time, Intensity, RER, Borgscale, Pulse)
      VALUES (@testId, blah blah blah);

 INSERT INTO vo2phases_tb 
             (VO2_TestID, Phase, Time, Intensity, RER, Borgscale, Pulse) 
      VALUES (@testId, blah blah blah);

 INSERT INTO vo2phases_tb 
             (VO2_TestID, Phase, Time, Intensity, RER, Borgscale, Pulse) 
      VALUES (@testId, blah blah blah);

这样每个子行都可以获得正确的父行ID。