2015-09-04 71 views
0

我在node.js(MySQL模块)中使用MySQL来管理我的数据库。我有关于一个主表如下两个表:根据先前插入的值插入查询

表1(主表):Flights

+-----+-------------+-----------------+ 
| Id | CreatedDate |  Notes  | 
+-----+-------------+-----------------+ 
| 1 | 2015-01-01 | No reservations | 
| 2 | 2015-02-15 | Without places | 
| ... | ...   | ...    | 
+-----+-------------+-----------------+ 

表2:FlightPassengers

+----------+------------+--------+ 
| IdFlight | Passenger | Arrive | 
+----------+------------+--------+ 
| 1  | 125  | true | 
| 2  | 115  | false | 
| ...  | ...  | ... | 
+----------+------------+--------+ 

表3:PassangerParameters

+----------+-------------+-------+ 
| IdFlight | Parameter | Value | 
+----------+-------------+-------+ 
| 1  | Age   | 12 | 
| 2  | Civil status| S  | 
| 2  | Age   | 25 | 
| 4  | Civil status| M  | 
| 4  | Age   | 40 | 
| ...  | ...   | ... | 
+----------+-------------+-------+ 

现在,当我想添加一个航班,我有使INSERT INTO Flights SET ? MySQL查询,然后再拿到Flight Id,使这个人querys:

INSERT INTO FlightPassengers VALUES (?,?,?) 
INSERT INTO PassangerParameters VALUES (?, ?, ?), (?, ?, ?) 

其他表中插入值。在这种方式下,我觉得是非常低效和不舒服,特别是对于PassangerParameters表。

如何使此查询更有效?有一种方法可以让我们正确地做到这一点?

+0

你是如何访问数据库?执行插入查询时,大多数API将返回最后一个插入ID。 – jwueller

+0

@jwueller我正在使用mysql模块[链接](https://www.npmjs.com/package/mysql)。我已经得到最后一个插入ID来更新我的其他表,但我想知道是否有一个有效的方法来使用最后一个插入Id – Golinmarq

+1

一个接一个地执行这些查询实际上是执行这些查询的标准方式。您可以使用PL/SQL在数据库引擎中完成所有操作,但仍然需要按顺序执行查询。另外,将逻辑存储在数据库中通常不是一个好主意,所以我肯定会建议在节点中进行。 – jwueller

回答

1

你可以使用一个TRIGGER自动插入到其他表,当你插入Flights

CREATE TRIGGER insertPassInfo 
    AFTER INSERT ON Flights 
    FOR EACH ROW 
    BEGIN 
     INSERT INTO FlightPassengers VALUES (NEW.Id, ?, ?); 
     INSERT INTO PassengerParameters VALUES (NEW.Id, ?, ?), (NEW.Id, ?, ?); 
    END 
+0

这是一个好主意,但我如何处理“PassengerParameters”行可能因不同请求而异的事实?即有时我有5,3或1个参数来设置passanger – Golinmarq