我这里有两张桌子。一个是Items
,另一个是Parts
。
Items
有part_id
,Parts
有item_id
。
当用户按下ItemDetail
视图中的提交按钮时,数据将被发送到服务器并插入到这两个表中。
以下是我的代码的工作原理:
Items
表,然后获取新id
数据的Item
Parts
和其他item_id
数据Part
表格
Items
part_id
表格
醇>
但我可以在一个请求中编写这三个SQL请求吗?
这是我的表的结构:
产品
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 | |
答案 0 :(得分:1)
你不应该有两个相互指向的表,只有一个表应该有一个外键,而不是两个。
那么你要找的是:http://dev.mysql.com/doc/refman/5.7/en/commit.html
事务确保执行所有查询,或者如果某处出现错误,将恢复所有更改。
答案 1 :(得分:0)
查看您正在使用的逻辑,您正在正确地执行此操作。
由于它们是两个单独的表,因此您需要在SQL中执行两个单独的insert语句。当然,您可以使用存储过程,这样您只需要在代码中调用一个项目,SP就会执行两次插入。
这里的一个问题是你使用的代码是什么?如果您使用的是类似实体框架的内容,那么您的关系就会在您的元素之间定义,例如
项目
-Field 1
-Parts(FK) List<Parts>
那会有用,但看看你标记了什么,我猜你不使用ASP语言?如果你让我知道,我可能会有更好的解决方案。