2009-12-29 11 views
19

Ich bin beteiligt ist ein Projekt, ein Projekt von Oracle zu MySQL zu migrieren. In Oracle habe ich die Möglichkeit, ein SQL-Skript zu erstellen, das andere externe SQL-Skriptdateien referenziert oder einfügt, wenn der Batch über die Befehlszeile ausgeführt wird. Ich habe ein Skript namens CreateAllTables.sql, die intern wie folgt aussieht:MySQL Ein Skript in das Skript einfügen

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

Ich bin bereits über die MySQL-Kommandozeile „Source“ -Befehl, aber mein Ziel ist es, eine einzige Haupt .sql-Skriptdatei aufzurufen, schließt andere Skripte über einen einzigen Anruf Befehlszeile wie folgt:

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

Also meine Frage ist, wie ich das mit MySQL?

Antwort

22

source funktioniert für mich.

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

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

$ mysql ... < foo.sql 

Jetzt Tabelle foo ist weg und bar erstellt wird.

+0

+1 Interessanterweise schienen alle Beispiele, die ich gesehen habe, darauf hinzuweisen, dass dies nur eine Befehlszeilenfunktion war. Ich bin noch ziemlich neu in MySQL. – James

+0

@James, Sie haben recht, die 'mysql (1) 'man-Seite empfiehlt dringend, dass dies nur ein interaktiver Modus ist. – pilcrow

+1

Sie können tun Hilfe in der mysql-Kommandozeilen-Client, und sehen Sie die möglichen Befehle vom Client verstanden (nicht SQL Server-Befehle, mysql Kommandozeilenbefehle): mysql> Hilfe Informationen zum MySQL-Produkte und Dienstleistungen, besuchen Sie: http://www.mysql.com/ Für Entwickler Informationen, einschließlich der MySQL-Referenzhandbuch, besuchen Sie: http://dev.mysql.com/ Um MySQL Network Support, Training oder andere zu kaufen Produkte, besuchen Sie: https://shop.mysql.com/ Liste aller MySQL-Befehle: N Anmerkung: Alle Textbefehle müssen zuerst online sein und mit ';' enden. ? (\?) Synonym für 'Hilfe '. ... etc ... –

7

Sie können eine ähnliche Sache mit Quelle in mysql tun.

Ich habe inc1.sql mit diesem Inhalt:

use test; 
create table testinc(
    id int 
); 

Und inc2.sql wie folgt aus:

insert into testinc values (1); 

und main.sql wie folgt aus:

source inc1.sql 
source inc2.sql 

Und i kann main.sql so laufen lassen:

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

Danach kann ich überprüfen, dass es, indem Sie diese gearbeitet:

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

Beachten Sie, dass die Option „Quelle“, oben, nur funktioniert (für mich), wenn das Skript durch einen MySQL-Client ausgeführt wird, unterstützt es. (Der mysql Kommandozeilen-Client in der ursprünglichen Frage des OP verwiesen geschieht eine jener Kunden zu sein.)

Aber denken Sie daran „Quelle“ ist nicht einer der vielen MySQL-spezifische Erweiterungen der SQL-Sprache. Es ist ein Client-Befehl, keine SQL-Anweisung,

Warum kümmert es dich?

Wenn Sie Ihr SQL-Skript über eine alternative Methode (z. B. über "execSQL" von JDBC) an den MySQL-Server senden, funktioniert der Befehl "source" nicht für die Einbindung anderer Skripte.

+1

Dies beantwortet die Frage nicht. – David

+2

Yah, ich weiß. Ich hätte es vorgezogen, der Kommentarliste der akzeptierten Antwort einfach einen Kommentar hinzuzufügen. Es gibt einige Verwirrung in diesem Kommentarstrom und ich dachte, dass diese Information helfen würde, zu klären. Aber dies ist ein neuer Stack-Overflow-Account und ich habe noch nicht genug Credits, um zu kommentieren. (Zumindest denke ich, deshalb kann ich nichts dazu sagen.). Also habe ich stattdessen eine neue "klärende" Antwort veröffentlicht. Entschuldigung, wenn das beleidigt. –

+2

Ziemlich hilfreich; Danke für das Biegen der Regeln. –

Verwandte Themen