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 后获取最后插入的行?

mysql数据库新插入数据,需要立即获取最新插入的id

替换 .plist 文件中的行以修改 <string> - 可以吗?

PHP MySQL 相同的查询返回不同的行数

将 tr 按索引移动到新位置

立即抓取mySql中自动生成的字段以供使用