Masowa zmiana zawartości pola w bazie MySQL
W dniu dzisiejszym przenosiłem bazę danych swojego bloga na nowy hosting. Myślałem, że uda mi się to praktycznie bezproblemowo, ale niestety tak nie było. Problemy już się zaczęły podczas próby importu z pliku bazy na nowy serwer. Za każdym razem kończyło się to jakimś błędem nie do końca dla mnie zrozumiałym. Problem jednak udało mi się rozwiązać przenosząc tabelę po tabeli, a nie hurtem całą bazę. Problem rozwiązany.
Niestety pojawił się kolejny znacznie poważniejszy problem, a raczej wyzwanie. Należało w jakiś sposób wyedytować wszystkie wpisy w bazie danych, które nawiązywały w jakiś sposób do starego adresu bloga.
W skrócie: należało każdy wpis zawierający w sobie markasblog.cba.pl zamienić na markasblog.pl w innym przypadku, każda fotografia, każdy link do innego postu w rzeczywistości linkował by do serwera cba.pl, który tak naprawdę już niedługo przestanie istnieć.
Jeżeli miałbym edytować praktycznie każdy wpis w bazie ręcznie, zajęłoby mi to jakiś miesiąc. Musiałem poszukać możliwości masowej zmiany wpisów w bazie danych. I znalazłem. Jak zwykle okazało się, że najprostsze rozwiązania są najskuteczniejsze.
Z pomocą przyszła mi funkcja REPLACE() uruchomiana z wyzwalaczem UPDATE. Poniżej składnia polecenia, za pomocą którego zastępujemy konkretny ciąg znaków innym ciągiem.
-
UPDATE tabela SET pole = REPLACE (pole, ‘Szukany ciąg znaków’,‘Nowy ciąg znaków’)
I tak na przykładzie mojego przypadku: chciałem zastąpić ciąg znaków markasblog.cba.pl ciągiem znaków markasblog.pl. W tym celu użyłem tak skonstruowanego zapytania do bazy:
-
UPDATE wp_posts SET guid = REPLACE (guid,‘markasblog.cba.pl’,‘markasblog.pl’)
Oczywiście czynność tą należy powtórzyć dla każdej tabeli w bazie, ale i tak jest to sposób na tyle szybki, że ja uporałem się w 10 minut w około 1,5 wpisów w bazie.


