Подтвердить что ты не робот

MySQL Включите script в script

Я участвую в проекте для переноса проекта с Oracle на MySQL. В Oracle у меня есть возможность создать SQL script, который ссылается или включает другие внешние файлы SQL script, когда пакет запускается через командную строку. У меня есть script, называемый CreateAllTables.sql, который выглядит так:

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

Я уже знаю команду командной строки командной строки MySQL, но моя цель состоит в том, чтобы вызвать один основной файл .sql script, который включает в себя другие скрипты через один вызов из командной строки, например:

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

Итак, мой вопрос: как мне это сделать с MySQL?

4b9b3361

Ответ 1

source работает для меня.

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

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

$ mysql ... < foo.sql

Теперь таблица foo ушла, и создается бар.

Ответ 2

Обратите внимание, что параметр "источник", выше, работает только (для меня), если script выполняется через клиент mysql, который его поддерживает. (Клиент командной строки mysql, на который ссылается исходный вопрос OP, является одним из этих клиентов.)

Но помните, что "источник" не один из множества расширений mysql для языка sql. Это клиент-команда, а не оператор sql,

Почему вас это волнует?

Если вы отправляете свой sql script на сервер MySQL с помощью альтернативного метода (например, через JDBC "execSQL" ), команда "source" не будет работать для включения других скриптов.

Ответ 3

Вы можете сделать аналогичную вещь с источником в mysql.

У меня есть inc1.sql с этим содержимым:

use test;
create table testinc(
   id int  
);

И inc2.sql вот так:

insert into testinc values (1);

и main.sql:

source inc1.sql
source inc2.sql

И я могу запустить main.sql следующим образом:

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

После этого я могу проверить, что это сработало, сделав следующее:

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