【发布时间】:2014-03-08 01:58:07
【问题描述】:
我目前有以下陈述。
INSERT INTO TripsTaken (ProfileId, DestinationLocation, Name, ImageUrl, StartDate, EndDate, Summary, Latitude, Longitude) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO Transportation(Type, Location, StartDate, EndDate) VALUES (?, ?, ?, ?);
INSERT INTO TripsTakenTransportation (TripId, id) VALUES( (SELECT MAX(LAST_INSERT_ID()) FROM TripsTaken) , LAST_INSERT_ID());
INSERT INTO Transportation(Type, Location, StartDate, EndDate) VALUES (?, ?, ?, ?);
INSERT INTO TripsTakenTransportation (TripId, id) VALUES( (SELECT MAX(LAST_INSERT_ID()) FROM TripsTaken) , LAST_INSERT_ID());
我收到以下错误:
{ [错误:ER_NO_REFERENCED_ROW_:无法添加或更新子行:外键约束失败(
tripsdatabase.tripstakentransportation,约束tripstakentransportation_ibfk_1外键(TripId)参考TripsTaken(TripId))] 代码:'ER_NO_REFERENCED_ROW_', 错误号:1452, sqlState: '23000', 索引:2 }
只要语句INSERT INTO TripsTakenTransportation... 出现两次,就会发生错误。我怀疑我的子查询 (SELECT MAX(LAST_INSERT_ID()) FROM TripsTaken) 第二次没有达到我的预期。
如何从表中获取 LAST_INSERT_ID()、存储它并在我的其他查询中重用它?
注意:
Transportation 也有一个自动增量列。
【问题讨论】:
-
@Mate 我在阅读文档时可能遗漏了一些东西,但我没有找到解决问题的方法。
-
将 (SELECT MAX(LAST_INSERT_ID()) FROM TripsTaken) 转换为 (SELECT MAX(ID) FROM TripsTaken) 或在未命名 ID 的情况下使用自动递增的主键
-
@rusben 与数据库的连接很多,所以如果另一个用户在我处理值时更改它,事情就会出错。 LAST_INSERT_ID() 是每个会话的值。
-
我认为查询是错误的。可能你会喜欢使用sql变量stackoverflow.com/questions/1009954/…
标签: javascript mysql sql