MySQL multi CREATE TABLE поможет синтаксис? - PullRequest
3 голосов
/ 23 апреля 2010

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

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

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

Ответы [ 5 ]

6 голосов
/ 23 апреля 2010

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

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

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

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

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

3 голосов
/ 23 апреля 2010

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

0 голосов
/ 23 апреля 2010

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

mysql -u[username] -p[password] --database DataBase1 < scriptname.sql
0 голосов
/ 23 апреля 2010

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

0 голосов
/ 23 апреля 2010

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

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

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

...