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.
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.
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>';
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. –
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
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!
Nie jestem pewien, co powstrzymywało tę odpowiedź przed otrzymaniem akceptacji! – codisfy
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.
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.
Użyj INFORMATION_SCHEMA, aby uzyskać wszystkie tabele w bazie danych. –