2010-06-25 18 views
6

Mam arkusz Excel zawierający około 2000 wierszy, które chcę wstawić do mojej bazy danych.MySQL: Wstaw, jeśli istnieje klucz obcy

Problem polega na tym, że tabela, w której chcę wstawić 2.000 wierszy, ma kolumnę, która odwołuje się do klucza obcego w innej tabeli. Niestety wiele zapytań kończy się niepowodzeniem, ponieważ podana wartość klucza obcego NIE istnieje.

Wiem, że mogę zignorować kontrole kluczy zagranicznych, ale to nie jest to, czego chcę. Nie chcę ignorować kluczy obcych, chcę tylko, aby złe zapytania nie były wykonywane.

Przykład:

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

pierwsze zapytanie nie powiedzie się, ponieważ TEST.id referencje foobar.id i nie ma foobar.id = 10. Jednak drugie zapytanie będzie działać, ponieważ foobar.id = 20 istnieje, ale drugie zapytanie nie zostanie wykonany, ponieważ pierwszy już się nie powiódł.

Czy jest jakiś sposób, że nie otrzymuję błędu w pierwszym zapytaniu, a moje pozostałe zapytania będą nadal wykonywane?

Mógłbym napisać skrypt php, ale wolałbym tutaj rozwiązanie MySQL.

Odpowiedz

3

Można zmienić, aby wstawić wynik select, więc coś takiego:

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

trzeba dodać limitu 1, w przeciwnym razie każda wkładka może być wiele wierszy. – MJB

+0

@MJB Zakładam, że id jest kluczem podstawowym na 'foobar', na OP, więc' LIMIT' * nie powinien * być potrzebny. –

+0

Jeśli robię to w ten sposób, dane można wstawić tylko do "testu", który jest już w "foobar", prawda? Ale mam nowe dane do dodania, które pochodzą z arkusza Excela. Czy mogę jakoś to zmienić, więc mogę dodać do niego nowe dane? – user375700