2011-11-01 27 views
8

Jak mogę dodać prefiks do wszystkich tabel w mysql za pomocą zapytania.Jak dodać prefiks wszystkich tabel w mysql

Na przykład:

muszę dodać „dr_” we wszystkich tabelach, które są dostępne w bazie danych mysql.

+1

Użyj INFORMATION_SCHEMA, aby uzyskać wszystkie tabele w bazie danych. –

Odpowiedz

11

Run wszystkie zapytania, które można uzyskać z uruchomieniem tego zapytania:

SELECT Concat('ALTER TABLE `', TABLE_NAME, '` RENAME TO `dr_', TABLE_NAME, '`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '<name of your db>'; 
+4

Wygląda na to, że zadziała (jeszcze nie uruchomiliśmy jeszcze komend), ale dodanie "Where TABLE_SCHEMA =" db_name "" ograniczy tabele do tego pojedynczego db, co prawdopodobnie jest potrzebne, jeśli masz wiele baz danych. –

+1

To jest geniusz! Mały dodatek, dodaj znaki \ dookoła nazwy tabeli: 'SELECT Concat ('ALTER TABLE \' ', TABLE_NAME, \"' RENAME TO \ 'dr_', TABLE_NAME, '\ ';') FROM INFORMATION_SCHEMA.TABLES GDZIE TABLE_SCHEMA = 'db_name'; ' – Jeffrey

12

dla tego przykładu, będę tworzyć bazę danych o nazwie prefixdb z 4 tabel:

mysql> drop database if exists prefixdb; 
Query OK, 4 rows affected (0.01 sec) 

mysql> create database prefixdb; 
Query OK, 1 row affected (0.00 sec) 

mysql> use prefixdb 
Database changed 
mysql> create table tab1 (num int) ENGINE=MyISAM; 
Query OK, 0 rows affected (0.05 sec) 

mysql> create table tab2 like tab1; 
Query OK, 0 rows affected (0.05 sec) 

mysql> create table tab3 like tab1; 
Query OK, 0 rows affected (0.05 sec) 

mysql> create table tab4 like tab1; 
Query OK, 0 rows affected (0.04 sec) 

mysql> show tables; 
+--------------------+ 
| Tables_in_prefixdb | 
+--------------------+ 
| tab1    | 
| tab2    | 
| tab3    | 
| tab4    | 
+--------------------+ 
4 rows in set (0.00 sec) 

kwerendę, aby wygenerować to by być

select 
    concat('alter table ',db,'.',tb,' rename ',db,'.',prfx,tb,';') 
from 
    (select table_schema db,table_name tb 
    from information_schema.tables where 
    table_schema='prefixdb') A, 
    (SELECT 'dr_' prfx) B 
; 

Running go w wierszu poleceń uzyskać to:

mysql> select concat('alter table ',db,'.',tb,' rename ',db,'.',prfx,tb,';') from (select table_schema db,table_name tb from information_schema.tables where table_schema='prefixdb') A,(SELECT 'dr_' prfx) B; 
+----------------------------------------------------------------+ 
| concat('alter table ',db,'.',tb,' rename ',db,'.',prfx,tb,';') | 
+----------------------------------------------------------------+ 
| alter table prefixdb.tab1 rename prefixdb.dr_tab1;    | 
| alter table prefixdb.tab2 rename prefixdb.dr_tab2;    | 
| alter table prefixdb.tab3 rename prefixdb.dr_tab3;    | 
| alter table prefixdb.tab4 rename prefixdb.dr_tab4;    | 
+----------------------------------------------------------------+ 
4 rows in set (0.00 sec) 

przekazać wynik z powrotem do mysql tak:

mysql -hhostip -uuser -pass -AN -e"select concat('alter table ',db,'.',tb,' rename ',db,'.',prfx,tb,';') from (select table_schema db,table_name tb from information_schema.tables where table_schema='prefixdb') A,(SELECT 'dr_' prfx) B" | mysql -hhostip -uuser -ppass -AN 

Jeśli chodzi o pytanie, czy chcesz zmienić nazwy wszystkich tabel, nie dotykać baz information_schema i MySQL. Użyj tego zapytania zamiast:

select 
    concat('alter table ',db,'.',tb,' rename ',db,'.',prfx,tb,';') 
from 
    (select table_schema db,table_name tb 
    from information_schema.tables where 
    table_schema not in ('information_schema','mysql')) A, 
    (SELECT 'dr_' prfx) B 
; 

Spróbuj!

+0

Nie jestem pewien, co powstrzymywało tę odpowiedź przed otrzymaniem akceptacji! – codisfy

0

Aby dodać do doskonałej i kompleksowej odpowiedzi Rolando. Jeśli uruchomisz kwerendy RENAME wygenerowane przez jego zapytanie SELECT CONCAT (użyłem phpMyAdmin i właśnie skopiowałem zapytania wyjściowe do pola SQL i kliknąłem Go), nie powinieneś mieć żadnych problemów z ograniczeniami klucza obcego. Właśnie zrobiłem to w testowej bazie danych w XAMPP i wszystkie tabele zmieniły nazwę na ok, a ograniczenia pozostały nienaruszone. Może to wydawać się oczywiste dla ekspertów SQL, ale być może nie dla amatorów.

0

Dodaj prefiks do wszystkich tabel bazy danych.

Zakładając, że baza danych nazwano „my_database” i przedrostek chcesz dodać to „my_prefix”, należy wykonać następujące zapytanie:

SELECT Concat('ALTER TABLE ', TABLE_NAME, ' RENAME TO my_prefix_', TABLE_NAME, ';') FROM information_schema.tables WHERE table_schema = 'my_database' 

Twój zestaw wynik będzie grono zapytań, które można kopiować i wklej do ulubionego edytora MySQL (Sequel Pro, phpMyAdmin, cokolwiek). Po prostu wklej je i wykonaj, a wszystko gotowe.

Powiązane problemy