views:

221

answers:

2

I'm involved is a project to migrate a project from Oracle to MySQL. In Oracle I have the ability to create a SQL script that references or inlcudes other external SQL script files when the batch is run via command line. I Have a script called CreateAllTables.sql that looks like this internally:

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

I'm already aware of the MySQL command line "Source" command, but my goal is to invoke a single main .sql script file that includes other scripts via one single command line call like this:

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

So my question is how do I do this with MySQL?

+2  A: 

source works for me.

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

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

$ mysql ... < foo.sql

Now table foo is gone and bar is created.

pilcrow
+1 Interesting, all of the examples I saw seemed to suggest this was a command line function only. I'm still pretty new to MySQL.
James
@James, you're right, the `mysql(1)` man page does strongly suggest that this is an interactive-mode command only.
pilcrow
You can do help in the mysql command line client, and see the possible commands understood by the client (not sql server commands, mysql command line commands):mysql> helpFor information about MySQL products and services, visit: http://www.mysql.com/For developer information, including the MySQL Reference Manual, visit: http://dev.mysql.com/To buy MySQL Network Support, training, or other products, visit: https://shop.mysql.com/List of all MySQL commands:Note that all text commands must be first on line and end with ';'? (\?) Synonym for `help'....etc...
Roland Bouman
+1  A: 

You can do a similar thing with source in mysql.

I have inc1.sql with these contents:

use test;
create table testinc(
   id int  
);

And inc2.sql like this:

insert into testinc values (1);

and main.sql like this:

source inc1.sql
source inc2.sql

And i can run main.sql like this:

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

After that I can verify that it worked by doing this:

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