2010-01-08 79 views
1

我看,擁有3個表的數據庫到我要插入數據:插入相關MySQL數據與AUTO_INCREMENT

resource 
    id (AUTO_INCREMENT) 
    name 

resource_item 
    id (AUTO_INCREMENT) 
    name 
    resource_id (FK ref resource.id) 

resource_item_business_function 
    id (AUTO_INCREMENT) 
    business_function_name 
    resource_item_id 

我正在掙扎的事實是,這個一定要照本宣科。我只插入了1 resource記錄,因此我可以輕鬆地將插入腳本編寫到resource表中。我有~20 resource_item記錄插入resource,我甚至可以使用LAST_INSERT_ID()功能輕鬆完成。問題是... 如何插入resource_item_business_function

我不知道如何插入適當resource_item_id到每個resource_item_business_function記錄。任何想法將不勝感激。

回答

0

每次插入resource_item後,您都需要使用LAST_INSERT_ID()。所以你的最終腳本可能看起來像這樣:

SET AUTOCOMMIT=0; 
SET @RESOURCE_ID=0; 

INSERT INTO resource (NULL, "Some Name"); 
SELECT LAST_INSERT_ID() INTO @RESOURCE_ID; 

INSERT INTO resource_item (NULL, "Some Name", RESOURCE_ID); 
INSERT INTO resource_item_business_function (NULL, "Some Name", LAST_INSERT_ID()); 
...etc... 
INSERT INTO resource_item (NULL, "Some Name", RESOURCE_ID); 
INSERT INTO resource_item_business_function (NULL, "Some Name", LAST_INSERT_ID()); 

COMMIT; 
+0

呃。我希望有一些聰明的腳本/循環我可以做,以避免個別的SQL語句。另一方面是沒有級聯的FK,所以我希望我可以編寫腳本來自動刪除現有記錄(如果執行多次)。爲了清楚起見,我把最後一部分留下了。 :-) – 2010-01-08 19:22:50

+0

然後在腳本完成執行後放下程序,我想?我絕對不希望這種程序在數據庫中徘徊。 – 2010-01-08 19:26:16

+0

如果它不是一個正在進行的操作,我不會使用數據庫端SP或觸發器。 – 2010-01-08 19:27:42