Archiwum kategorii ‘MySQL’

h1

Jak dodać prefix do wszystkich tabel w bazie

maj 1, 2007

Mam konto mini na webd.pl. 200MB na stronę, transfer miesięczny 4GB i tylko 1 baza MySQL :/ O ile miejsca i transferu w zupełności mi wystarcza, tak ta jedna baza już nie. Jestem osobą dość kreatywną i miewam czasami kilka/kilkanaście pomysłów na sekundę, a jedna baza trochę mnie ogranicza. Zajmuje ją wortal useLinux, a ja chciał bym jeszcze bloga, jakąś bazę do testów itp. itd.

Myślałem o upgrade’dzie do konta large, ale daje mi ono dwa razy więcej przestrzeni i transferu których i tak nie wykorzystam, a tylko 2 dodatkowe bazy. To mnie i tak nie satysfakcjonuje, a koszty utrzymania wzrastają prawie dwukrotnie. Konto niestandardowe też nie wchodzi w grę ponieważ musi ono przewyższać parametrami konto WEBD Extra – 3GB na stronę, 480GB transferu i nielimitowana ilość baz MySQL. Cena – bagatela 299,9 zł/rok.

Musiałem wymyślić coś innego :) Grzebiąc w plikach konfiguracyjnych WordPressa i Drupala zauważyłem, że mają one możliwość koegzystencji z innymi systestemami i korzystania z jednej bazy przy pomocy tzw. prefiksów (kilku znaków dodawanych na początku nazwy każdej tabeli). To jest to! Rozwiązanie mojego problemu :D Drupal i WordPress w jednej bazie!

OK, ale Drupal jest już zainstalowany i żadnych prefiksów w nazwach tabel nie ma. Rzut okiem na opcje phpMyAdmin i… zonk. 53 tabele i nie ma opcji masowej zmiany nazw :/ O nie, ja ręcznie robił tego nie będę… zwłaszcza, że operacji na żywym ograniźmie nie lubię więc ilość operacji się podwaja, a w przyszłości jeszcze pewnie nie raz, nie dwa stanę przed takim zadaniem.

Pora poszukać odpowiedzi w Google: how do i add prefix to my gamma tables?

AFAIK the only way to do this is changing them manually one-by-one.

no to mnie Steve Machol pocieszył

Each table would need to be renamed by a seperate query unless you were really good at sql queries.

nie znam SQL, trochę PHP…
tgmorris użył SHOW TABLES, aby pokazać wszystkie nazwy tabel, wrzucił do Excela i dodał jakieś polecenia SQL, żeby zrobiło z tej nazwy tą z prefiksem. Tylko ja pod Linuksem nie mam Excela, a to nie jest zbyt dobry, ładny, ani uniwersalny sposób :P
Ale juz wiem jak pokazać liste tabel i znam polececenie do zmiany nazwy tabeli ;] teraz tylko jak je wykonać z poziomu skryptu PHP?

Chyba najwyższa pora na małą lekcję SQL:
Kurs języka SQL
Obsługa MySQL’a w PHP

Proste. Pomysł jest taki: biorę liste tabel dla każdej robię RENAME TABLE nazw TO prefix+nazw i gotowe. Pobieram dane, robię pętelkę i gotowe…

…nie do końca… Resource #id3 :/ Po kilku próbach i googlowaniu stwierdzam, że trzeba zmienić sposób pobierania nazw tabel.

Google: PHP MYSQL Example
przejrzałem kod i już wiedziałem co będzie mi potrzebne :)
mysql_list_tables()
mysql_tablename()
mysql_num_rows()
teraz wystarczy tylko zrobić pętelkę, wykorzystac odpowiednio te funkcjie i dodać parametry, dla łatwiejszego dalszgo użytkowania :D

add_prefix.php (922B; po sciągnięciu zmień nazwę pliku na add_prefix.php)

Skrypt działa i nic więcej nie można o nim powiedzieć ;) To mój pierwszy skrypt z wykorzystaniem SQL więc wybaczcie jeśli głoszę tutaj jakieś herezje :D Wszystkie poprawki, sugestie, komentarze mile widziane. Jeśli ten skrypt Ci się przydał, daj mi o tym znać!

Update:
Według sugestii hubiego zmodyfikowałem nieco skrypt, aby był nieco bardziej wymowny ;) Teraz po jego uruchomieniu pojawią się nazwa bazy danych na której pracujemy, zmieniane nazwy table oraz komunikat o zakończeniu działania skryptu. Jeśli lubicie swoje dane radzę PRZED WYKONANIEM SKRYPTU WYKONAĆ KOPIĘ ZAPASOWĄ DANYCH.

add_prefix_v0.01.php (po sciągnięciu zmień nazwę pliku na .php)