MySQL kontynuuje po błędzie wpisu duplikatu

1

Uruchamiam skrypt „bash for”, aby zaktualizować niektóre rekordy w mysql, na przykład:

for i in `cat yahoo.txt`; do mysql $DB --batch -fe "update users set email=concat(left(email, instr(email, '@')), 'yahoo.com') where email like '%@$i';" ; done

ale nawet z opcją --force aktualizacja zatrzymuje się po pierwszym błędzie:

ERROR 1062 (23000) at line 1: Duplicate entry '[email protected]' for key 3

Czy mogę zmusić go do kontynuowania?

w00t
źródło
Co sprawia, że ​​uważasz, że to nie trwa? Ten skrypt powinien działać dobrze, chyba że twoja powłoka została ciekawie skonfigurowana.
womble
Wybieram błędnie wpisane wiadomości e-mail (przed wykonaniem skryptu i po nim), a liczby są takie same.
w00t

Odpowiedzi:

2

spróbuj zmienić aktualizację, aby zaktualizować zignoruj

http://dev.mysql.com/doc/refman/5.0/en/update.html :

W przypadku słowa kluczowego IGNORE instrukcja aktualizacji nie jest przerywana, nawet jeśli podczas aktualizacji wystąpią błędy. Wiersze, w których występują konflikty kluczy zduplikowanych, nie są aktualizowane. Wiersze, dla których kolumny są aktualizowane do wartości, które spowodowałyby błędy konwersji danych, są aktualizowane do najbliższych prawidłowych wartości.

pQd
źródło
Dziękuję Ci! nie miał pojęcia, że ​​istnieje taka opcja.
w00t,
jest też wstawka ignoruj ​​- pomija wstawki w przypadkach, gdy element o identycznej wartości [dla klucza podstawowego, unikatowych indeksów] już istnieje.
pQd