MySQL multi CREATE TABLE поможет синтаксис?

Я пытаюсь написать сценарий MySQL, который создает несколько таблиц. Я имею:

CREATE TABLE `DataBase1`.`tbl_this`(
...
);
CREATE TABLE `DataBase1`.`tbl_that`(
...
);
... (14 more) ...

НО, только первый CREATE TABLE заявление выполнено. Я не получаю синтаксических ошибок. Хм, я пропускаю MSSQL эквивалент GO? Что я здесь не так делаю; как мне заставить этого ребенка управлять всеми столами?

5 ответов

Решение

Синтаксис создания таблицы выглядит нормально. Вероятно, инструмент, который вы используете для выполнения SQL, просто выполняет первый оператор.

Как вы выполняете этот сценарий?

Если вы пытаетесь запустить его программно, вы должны знать, что MySQL API по умолчанию выполняет только один оператор за раз. Вы не можете связать их вместе с точкой с запятой и ожидать, что это выполнит все операторы.

Вы можете выполнить каждый CREATE TABLE оператора в цикле, или вы можете запустить скрипт, подав его в качестве входных данных mysql клиент командной строки.

Это не так просто, как кажется, написать класс приложения для выполнения сценариев общего назначения в вашем приложении, потому что полный синтаксис сценария включает в себя множество угловых случаев.

Смотрите примеры угловых случаев в моем ответе на Загрузка.sql файлов из PHP.

Попробуй это:

использовать имя_базы_данных;

создать таблицу а..; создать таблицу b..; создать таблицу c..;

Как вы выполняете свой сценарий? Если вы делаете это из командной строки, это должно быть что-то вроде этого:

mysql -u[username] -p[password] --database DataBase1 < scriptname.sql

Таблицы ссылаются (например, первичные ключи и т.п.) друг на друга? Таблицы создаются последовательно, поэтому, если ваша вторая таблица ссылается на таблицу, которая еще не создана, произойдет сбой.

Другие вопросы по тегам