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 'example@yahoo.com' for key 3

Czy mogę zmusić go do kontynuowania?


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.