Rally DB新手问题:
我正在尝试将用户记录插入数据库。 id类型可以是自动递增序列,也可以是INT。
如何插入具有唯一ID的记录,我可以返回该ID,确保如果请求由多个应用程序服务器处理,那么我不会生成重复的ID。
e.g。
应用服务器需要返回生成记录的ID。我无法根据属性进行选择,因为
一个解决方案是每个应用服务器还插入服务器ID,服务器更新号,组合,然后根据它进行选择。
我觉得这应该是一个普遍的问题,有一个更简单的解决方案。
如果重要的话,我正在使用PostgreSQL。
答案 0 :(得分:3)
使用postgres,您可以使用RETURNING子句返回列的值,例如
INSERT INTO表(col1,col2,col3)VALUES(1,2,3)RETURNING id;
答案 1 :(得分:2)
您没有提及您正在使用的语言和工具。这很重要,因为标准并没有真正涵盖这一点,但许多客户端平台都有自己的抽象。
特别是JDBC有Statement.getGeneratedKeys()
和Statement.RETURN_GENERATED_KEYS
。
我认为在ODBC界面中没有任何等效内容。我没有找到一个快速搜索,但发现一些供应商将其添加为扩展名。
对于其他客户,它只取决于您使用的是什么。一些ORM层具有它们自己的处理,例如, Hibernate(以及其他JPA实现)处理密钥生成,ActiveRecord(blech),SQLAlchemy等也是如此。
否则,正如Lucas所说,你可以使用PostgreSQL扩展RETURNING the_key_column_names_here
。 (9.5应该有希望增加RETURNING PRIMARY KEY
)。
(SQL规范提供GENERATED ALWAYS
但据我所知,没有标准方法可以返回值。许多数据库无论如何都不会实现GENERATED
。)