MySQL 立即返回新插入的行以供 GraphQL 使用的正确方法? [复制]
Posted
技术标签:
【中文标题】MySQL 立即返回新插入的行以供 GraphQL 使用的正确方法? [复制]【英文标题】:Proper way for MySQL to immediately return a newly-inserted row, for GraphQL use? [duplicate] 【发布时间】:2019-07-03 16:50:03 【问题描述】:当使用 GraphQL 突变创建记录时,它期望返回完整的对象,例如:
mutation
createPost(title: "Good morning")
id
title
如何可靠地让 mysql 返回新插入的项目?我目前正在这样做:
INSERT INTO posts(title) VALUES('Good morning');
SELECT * FROM posts WHERE id = LAST_INSERT_ID();
但我不确定这是否是最好的方法。如果另一个用户碰巧在我自己之后立即执行INSERT
怎么办? LAST_INSERT_ID()
会引用他们的主键 ID 而不是我的吗?
【问题讨论】:
这是一个有效的问题,但我认为它并不是 GraphQL 所特有的。毕竟,如果您也在构建 REST API,您也会想知道同样的事情。您的问题的答案可以在这里找到:***.com/a/17112962/6024220 这是 MySQL 中唯一可能的方法LAST_INSERT_ID()
是基于会话的,所以这样使用它是安全的。PostgreSQL 有一个更好的功能 INSERT INTO ... RETURNING *
它可以直接返回输出,我希望MySQL 也支持这种语法。
【参考方案1】:
我们在上一份工作中就是这样做的,从来没有遇到任何问题。 The docs 说是每个连接,所以你不必担心另一个连接会改变它。
需要注意的一件事是使用一条 INSERT 语句插入多行。在这种情况下,LAST_INSERT_ID() 将返回第一个插入的 ID。
【讨论】:
以上是关于MySQL 立即返回新插入的行以供 GraphQL 使用的正确方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 PDO(使用 MySQL)中执行 INSERT 后获取最后插入的行?