Mysql 如何简化我的SQL请求?
我这里有两张桌子。一个是Mysql 如何简化我的SQL请求?,mysql,sql,refactoring,Mysql,Sql,Refactoring,我这里有两张桌子。一个是项目,另一个是零件 项目具有零件id,零件具有项目id 当用户从itemdail视图中按下提交按钮时,数据将发送到服务器并插入到这两个表中 下面是我的代码的工作原理: 首先插入项目表,并获取新项目数据的id 使用此项目id和其他零件数据插入到零件表 使用新的零件id 但是我可以在一个请求中编写这三个SQL请求吗 以下是我的表格结构: 项目 零件 看看你正在使用的逻辑,你做的是正确的 因为它们是两个独立的表,所以需要在SQL中执行两个独立的insert语句。当然,您可以使用
项目
,另一个是零件
项目
具有零件id
,零件
具有项目id
当用户从itemdail
视图中按下提交按钮时,数据将发送到服务器并插入到这两个表中
下面是我的代码的工作原理:
项目
表,并获取新项目
数据的id
项目id
和其他零件
数据插入到零件
表零件id
看看你正在使用的逻辑,你做的是正确的 因为它们是两个独立的表,所以需要在SQL中执行两个独立的insert语句。当然,您可以使用存储过程,这样您只需要调用代码中的一项,SP就会执行两次插入 这里的一个问题是您使用的是什么代码?如果您使用的是实体框架之类的东西,并且您的关系是在元素之间定义的,例如 项目 -字段1 -零件(FK)
列表
那会有用的,但是看看你标记的东西,我猜你没有使用ASP语言??如果让我知道,我可能会为您提供更好的解决方案。您不应该有两个这样相互指向的表,其中只有一个表应该有外键,而不是两个都有 那么你要找的是:
事务确保执行所有查询,或者如果某个地方出现错误,所有更改都将被还原。我想一个项目可以有多个部分?在这种情况下,从
Items
表中删除部分id
。您可以获得多个零件id
,因此无法像那样保存它。因为你已经从零件表中获得了尊敬,你可以这样做链接。这样你就可以摆脱步骤3。谢谢你的评论。项目与零件的关系为1:1。零件必须有零件id,但零件不必有零件id。@Ivar所说的即使在您描述的情况下仍然有效。你确定他们有1:1的关系吗?一个零件不能用于多个项目吗?您在谈论什么样的零件/项目?非常感谢您的评论。我没有使用sqls来生成此代码。我用sailsjs水线和knexjs来做这个。所以sailsjs迁移的表包含了这些表。sailsJS水线通过模型建立这些外键关系。我为我糟糕的英语道歉。谢谢你的评论。我正在使用javascript。nodejs和sailjs框架。实体框架是waterline和knex。不知道这个框架,我快速查找了一下,发现它与EntityFramework的功能非常相似。显示了表结构中类似列表的对象的一些示例。
Field | Type | Null | Key | Default | Extra |
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| price | int(11) | YES | | NULL | |
| part_id | int(10) unsigned | YES | | NULL | |
| type | varchar(255) | YES | | NULL | |
Field | Type | Null | Key | Default | Extra |
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| item_id | int(10) unsigned | NO | | NULL | |
| name | varchar(255) | NO | | NULL | |
| number | varchar(255) | YES | | NULL | |