2015-09-04 56 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