我正在创建一个网站,用户应该能够通过表单输入数据。 因此,我需要在第一个表中输入一行,并在第二个表中插入一行后,使用第一个表中的vo2testID作为自动递增的外键。
我的问题是当我尝试使用此查询在第二个表中插入内容时:
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');
我收到此错误:
我已经四处寻找解决方案,但我找到的唯一一个是禁用外键检查,我不想这样做。
答案 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。