2009-12-29 30 views
19

Estoy involucrado es un proyecto para migrar un proyecto de Oracle a MySQL. En Oracle tengo la capacidad de crear un script SQL que hace referencia o incluye otros archivos de script SQL externos cuando el lote se ejecuta a través de la línea de comandos. Tengo un script llamado CreateAllTables.sql que se parece a esto internamente:MySQL Incluir un script dentro del script

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

ya estoy al tanto de la línea de comandos de MySQL comando "Fuente", pero mi objetivo es invocar un único archivo de script .sql principal que incluye otras secuencias de comandos a través de un comando simple llamada línea como la siguiente:

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

Así que mi pregunta es ¿cómo puedo hacer esto con MySQL?

Respuesta

22

source trabaja para mí.

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

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

$ mysql ... < foo.sql 

Ahora tabla foo se ha ido y se crea la barra .

+0

+1 Interesante, todos los ejemplos que vi parecían sugerir que esto era solo una función de línea de comando. Todavía soy bastante nuevo en MySQL. – James

+0

@James, tiene razón, la página de comando man 'mysql (1)' sugiere encarecidamente que se trata de un comando de modo interactivo solamente. – pilcrow

+1

Usted puede hacer ayuda en el cliente de línea de comandos mysql, y ver los posibles comandos entendidos por el cliente (no comandos de SQL Server, los comandos de línea de comandos mysql): mysql> ayuda Para obtener información acerca de los productos de MySQL y servicios, visite: http://www.mysql.com/ Para obtener información sobre el desarrollador, incluido el Manual de referencia de MySQL, visite: http://dev.mysql.com/ Para comprar soporte de red MySQL, capacitación u otro productos, visite: https://shop.mysql.com/ Lista de todos los comandos de MySQL: N ota que todos los comandos de texto deben ser primero en línea y terminar con ';' ? (\?) Sinónimo de 'ayuda'. ... etc ... –

7

Puede hacer algo similar con la fuente en mysql.

tengo inc1.sql con estos contenidos:

use test; 
create table testinc(
    id int 
); 

Y inc2.sql así:

insert into testinc values (1); 

y main.sql así:

source inc1.sql 
source inc2.sql 

Y i puede ejecutar main.sql como este:

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

Después de que puedo comprobar que funcionaba al hacer esto:

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

Tenga en cuenta que la opción "fuente", anteriormente, sólo funciona (para mí) si el script se ejecuta a través de un cliente de MySQL que los apoyos eso. (El cliente de línea de comandos mysql se hace referencia en la pregunta original del OP pasa a ser uno de esos clientes.)

Pero recuerde "fuente" es no una de las muchas extensiones mysql-específicas del lenguaje SQL. Es un comando de cliente, no una instrucción SQL,

¿Por qué te importa?

Si envía su script sql al servidor MySQL mediante un método alternativo (a través de "execSQL" de JDBC, por ejemplo), el comando "fuente" no funcionará para la inclusión de otros scripts.

+1

Esto no responde la pregunta. – David

+2

Yah, lo sé. Hubiera preferido simplemente agregar un comentario a la lista de comentarios de la respuesta aceptada. Hay cierta confusión en la secuencia de comentarios y pensé que esta información ayudaría a aclarar. Pero esta es una nueva cuenta de stackoverflow y aún no tengo suficiente credibilidad para comentar. (Al menos creo que es por eso que no puedo comentar). Así que acabo de publicar una nueva respuesta de "aclaración" en su lugar. Disculpas si esto ofende. –

+2

Muy útil; gracias por doblar las reglas. –

Cuestiones relacionadas