2009-12-29 16 views
19

Jestem zaangażowany w projekt migracji projektu z Oracle do MySQL. W Oracle mam możliwość tworzenia skryptów SQL, które odwołują się lub zawierają inne zewnętrzne pliki skryptów SQL, gdy partia jest uruchamiana za pośrednictwem wiersza poleceń. Mam skrypt o nazwie CreateAllTables.sql który wygląda tak wewnętrznie:MySQL Dołącz skrypt w skrypcie

@tables\Site.sql 
@tables\Language.sql 
@tables\Country.sql 
@tables\Locale.sql 
@tables\Tag.sql 

już jestem świadomy komend linii poleceń MySQL „Źródło”, ale moim celem jest, aby powołać pojedynczy plik skryptu .sql że głównym zawiera inne skrypty za pomocą pojedynczego wywołania z linii poleceń w następujący sposób:

mysql --user=root --password --database=junkdb -vv < CreateAllTables.sql 

Moje pytanie brzmi: jak to zrobić z MySQL?

Odpowiedz

22

source działa dla mnie.

# -- foo.sql 
DROP TABLE foo; 
source bar.sql 

# -- bar.sql 
CREATE TABLE bar (i INT NOT NULL); 

$ mysql ... < foo.sql 

Teraz tabela foo zniknął i bar jest tworzony.

+0

+1 Interesujące, że wszystkie przykłady, które widziałem, sugerowały, że była to tylko funkcja wiersza poleceń. Wciąż jestem nowym użytkownikiem MySQL. – James

+0

@James, masz rację, strona man 'mysql (1)' zdecydowanie sugeruje, że jest to tylko polecenie trybu interakcyjnego. – pilcrow

+1

Można zrobić pomocy w linii klient poleceń mysql i zobacz możliwych poleceń rozumianych przez klienta (a nie polecenia SQL serwer, komendy linii poleceń mysql): mysql> Pomoc Aby uzyskać informacje na temat produktów, MySQL i usługi, odwiedź: http://www.mysql.com/ Informacje dla programistów, w tym podręcznik referencyjny MySQL, można znaleźć pod adresem: http://dev.mysql.com/ Aby kupić wsparcie dla sieci MySQL, szkolenie lub inne produkty, odwiedź: https://shop.mysql.com/ Lista wszystkich poleceń MySQL: N Uwaga: wszystkie polecenia tekstowe muszą być najpierw w linii i kończyć znakiem ";" ? (\?) Synonim słowa "pomoc". ... etc ... –

7

Możesz zrobić podobną rzecz ze źródłem w mysql.

mam inc1.sql z tych treści:

use test; 
create table testinc(
    id int 
); 

I inc2.sql tak:

insert into testinc values (1); 

i main.sql tak:

source inc1.sql 
source inc2.sql 

i ja może uruchomić main.sql w ten sposób:

mysql -uroot -pmysql -P3351 -e"Source main.sql" 

Po co mogę sprawdzić, czy to działa w ten sposób:

mysql> use test; 
Database changed 
mysql> select * from testinc; 
+------+ 
| id | 
+------+ 
| 1 | 
+------+ 
1 row in set (0.00 sec) 
10

Należy pamiętać, że opcja „źródło”, powyżej, działa tylko (dla mnie), jeśli skrypt jest uruchamiany przez klienta mysql, który obsługuje to. (Klient wiersza polecenia mysql mowa w oryginalne pytanie OP jest stanie się jednym z tych klientów.)

jednak pamiętać „źródło” jest nie jeden z wielu rozszerzeń mysql-specyficzna dla języka SQL. To polecenie klienta, a nie instrukcja SQL,

Dlaczego cię to obchodzi?

Jeśli wysyłasz skrypt SQL do serwera MySQL za pomocą alternatywnej metody (np. Za pomocą "execSQL" JDBC), polecenie "source" nie będzie działało dla dołączenia innych skryptów.

+1

To nie odpowiada na pytanie. – David

+2

Yah, wiem. Wolałbym po prostu dodać komentarz do listy komentarzy zaakceptowanej odpowiedzi. W tym strumieniu komentarzy jest trochę zamieszania i pomyślałem, że te informacje pomogą wyjaśnić. Ale jest to nowe konto stackoverflow i nie mam jeszcze wystarczającej wiarygodności, aby móc komentować. (Przynajmniej myślę, że dlatego nie mogę tego komentować.). Dlatego właśnie napisałem nową odpowiedź "wyjaśniającą". Przepraszam, jeśli to obraża. –

+2

Dość pomocne; dzięki za zgięcie reguł. –