2010-04-22 2 views
2

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

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

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

ответ

3

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

0

Пробуйте следующее:

use database_name;

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

+0

Хуже. Никаких таблиц не было создано вообще. –

+0

Я могу подтвердить, что это создает таблицу create A, но не B или C – DerpyNerd

0

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

4

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

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

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

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

См. Примеры угловых шкафов в моем ответе Loading .sql files from within PHP.

+0

В этом и заключается проблема, MySQL Query Browser обрабатывает только первую команду. Я буду отмечать @Florian_Gutmann, потому что он был первым и мог использовать очки (по сравнению с 48K ... jeez! Ты оспариваешься с Скитом?), Должен зацепиться за новую рыбу с rep. :) –

+0

LOL! Нет проблем, @Florian действительно был первым. Да, интерфейс запросов MySQL Query Browser похож на запуск одного оператора из кода приложения, поскольку он запускает один оператор. Query Browser также должен иметь параметр «Run SQL Script ...», который вы можете использовать для выполнения нескольких операторов из файла. –

+0

Скриптовые интерфейсы к MySQL выполняют только одну команду за раз. Это хорошо: это уменьшает автоматическое влияние SQL-инъекций. В некоторых средах есть интерфейс для нескольких операторов, например. на уровне C API, используя 'MYSQL_OPTION_MULTI_STATEMENTS_ON' или в PHP с' mysqli_multi_query'. – bobince

0

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

mysql -u[username] -p[password] --database DataBase1 < scriptname.sql 
Смежные вопросы