2010-06-25 67 views
6

我有一個大約2.000行的Excel表,我想插入到我的數據庫中。MySQL:如果外鍵存在,則插入

問題是我想插入2.000行的表有一個引用另一個表中的外鍵的列。不幸的是,很多查詢失敗,因爲提供的外鍵值不存在。

我知道我可以忽略外鍵檢查,但這不是我想要的。我不想忽略外鍵檢查,我只想讓不好的查詢不被執行。

例子:

INSERT INTO test (id, value) VALUES (10, 20); 
INSERT INTO test (id, value) VALUES (20, 20); 

第一查詢失敗,因爲TEST.id引用foobar.id並沒有foobar.id = 10.然而,第二個查詢會的工作,因爲foobar.id = 20存在,但第二個查詢將不會被執行,因爲第一個已經失敗了。

有什麼辦法,我沒有得到第一個查詢錯誤,我的其他查詢仍然會被執行?

我可以寫一個PHP腳本,但我更喜歡這裏的MySQL解決方案。

回答

3

你可以改變插入一個選擇的結果,所以像:

INSERT INTO test (id, value) 
SELECT foobar.id, 20 
FROM foobar WHERE id = 10; 
+0

有加限制1,否則每次插入可能是多行。 – MJB 2010-06-25 12:05:20

+0

@MJB我假設id是'foobar'上的主鍵,根據OP,所以不應該需要'LIMIT' *。 – 2010-06-25 12:10:19

+0

如果我這樣做,只能將數據插入到已經在「foobar」中的「test」中,對嗎?但是我添加了新的數據,這些數據來自Excel表格。 我可以以某種方式調整這個,所以我可以添加新的數據嗎? – user375700 2010-06-25 12:12:11