【问题标题】:Writing INSERT query for multiple tables为多个表编写 INSERT 查询
【发布时间】:2014-06-29 01:18:10
【问题描述】:

我正在编写一个食谱数据库应用程序,并且我已经对数据库架构进行了排序,但我并不费力地弄清楚要编写什么查询来将食谱插入数据库。

我有 3 张桌子

成分 成分_id...

食谱 recipe_id ...

食谱(数据透视表) 成分_id recipe_id

但我的理解是一次只能将数据插入一个表中。

这就是我的问题所在。如果我有一个表格来输入食谱,我该如何添加分成 3 个表格的食谱?我是否使用多个查询。如果是这样,我怎么能保证他们会匹配。

对不起,如果这听起来像一个愚蠢的问题,但它正在煎熬我的大脑,提前感谢您的反馈。

最好的问候

【问题讨论】:

标签: php mysql database schema


【解决方案1】:

您可以通过为相应的列分配公共值来保证行相互关联。

如果您决定将 recipes 中的 recipe_id 列定义为 AUTO_INCREMENT,并且您插入了一个为该列分配了生成值的行,则可以使用 LAST_INSERT_ID() 函数检索分配的值到专栏

INSERT INTO recipes (recipe_id, col2, col3) VALUES (NULL, 'fee', 'fi');

如果插入语句成功,您可以通过执行如下语句检索分配给 recipe_id 列的值(在同一个 MySQL 会话中,在执行任何其他语句之前):

SELECT LAST_INSERT_ID() AS recipe_id;

注意:一些 MySQL 客户端库具有为您执行此操作的方法/函数,因此您可以检索值而无需在代码中准备和执行另一个 SQL 语句,例如

PDO::lastInsertId 参考:http://www.php.net/manual/en/pdo.lastinsertid.php

mysqli::$insert_id 参考:http://www.php.net/manual/en/mysqli.insert-id.php

然后您可以将 INSERT 中返回的值提供给关联表,例如

INSERT INTO recipe_ingredient (recipe_id, ... ) VALUES ( 42, ... )

【讨论】:

  • 谢谢,这正是我一直在寻找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
  • 2020-04-05
  • 2015-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多