我正在尝试编写一个SQL查询,将测试数据插入到两个表中,其中一个表引用另一个表。
表格由以下内容创建:
CREATE TABLE address (
address_id INTEGER IDENTITY PRIMARY KEY,
...[irrelevant columns]
);
CREATE TABLE member (
...[irrelevant columns],
address INTEGER,
FOREIGN KEY(address) REFERENCES address(address_id)
);
我希望两个表中的id都能自动递增,这样我以后就可以轻松插入新行,而无需查看表中的id。
我需要在两个表中插入一些测试数据,每个表大约25行。插入的硬编码ID会导致以后插入新行时出现问题,因为id列的自动值尝试以1开头(已经在数据库中)。所以我需要让id自动生成,但我还需要知道数据库中有哪些id用于将测试数据插入到成员数据库中 - 我不相信自动生成的那些是连续的,所以不能假设我可以安全地硬编码那些。
这是测试数据 - 我不关心我将哪个记录链接到我要插入的每个成员行,只是说地址表中有一个带有该ID的地址记录。
到目前为止,我对如何做到这一点的想法包括:
SELECT address_id FROM address WHERE [some condition that will only give one row]
作为地址栏(缺点:也有点乱,涉及一个很长的陈述,我不关心的事情)这个问题有更简洁的方法吗?
我特别想知道是否有办法:
理想情况下,我希望这可以与尽可能多的(令人烦恼的略有不同)数据库引擎一起使用,但我需要至少支持postgresql和sqlite - 理想情况下在一个查询中,尽管我可以有两个单独的查询。 (我有单独的用于创建表格,唯一的区别是INTEGER GENEREATED BY DEFAULT AS IDENTITY
而不仅仅是IDENTITY
。)
答案 0 :(得分:0)
https://www.postgresql.org/docs/8.1/static/functions-sequence.html
听起来LASTVAL()
就是您正在寻找的内容。在现实世界中,还可以在多个选择之间保持事务一致性,因为它的范围限定在上次插入的会话中。