如何简化我的SQL请求?

时间:2016-06-03 06:41:17

标签: mysql sql refactoring

我这里有两张桌子。一个是Items,另一个是Parts

Itemspart_idPartsitem_id

当用户按下ItemDetail视图中的提交按钮时,数据将被发送到服务器并插入到这两个表中。

以下是我的代码的工作原理:

  1. 首先插入Items表,然后获取新id数据的Item
  2. 使用此Parts和其他item_id数据
  3. 插入Part表格
  4. 使用新的Items
  5. 更新到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 | |
    

2 个答案:

答案 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语言?如果你让我知道,我可能会有更好的解决方案。