Синтаксическая ошибка SQL с ОЧЕНЬ основной командой? Зачем? - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь просто создать таблицу, используя MySql Workbench. Вот команда sql:

CREATE TABLE `bmxData`.`new_table` ();

пока я получаю эту ошибку при выполнении: -

Выполнение:

CREATE TABLE bmxData. new_table ();

Операция не выполнена: при применении сценария SQL к базе данных произошла ошибка.

ОШИБКА 1064: у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с ')' в строке 1

Оператор SQL:

CREATE TABLE bmxData. new_table ()

Есть идеи почему? Понятия не имею, что я делаю не так ...

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Существует некоторая дискуссия в реляционной теории значения таблиц с нулевыми столбцами. Также описывается как отношения нулевой степени .

Исследователь реляционной теории С. Дж. Дата относится к TABLE_DUM и TABLE_DEE. Оба не имеют столбцов, но разница в том, что TABLE_DUM не имеет ни столбцов, ни строк, тогда как TABLE_DEE имеет одну строку (даже если в этой строке нет столбцов).

См. Этот отрывок из «Глубинной базы данных: теория отношений для практиков»: https://flylib.com/books/en/2.214.1.38/1/

Поэтому следующий запрос не будет возвращать строк:

SELECT * FROM TABLE_DUM CROSS JOIN MyTable;

Принимая во внимание, что этот запрос будет возвращать те же строки и столбцы, что и MyTable:

SELECT * FROM TABLE_DEE CROSS JOIN MyTable;

Так что есть некоторый прецедент и значение для таблицы без столбцов. Вы можете думать об этом по аналогии как о роли 0 и 1 в умножении:

  • 0 x любое число 0
  • 1 x любое число такое же число

ОДНАКО стандартный SQL не позволяет этого. SQL не совсем точно реализует всю концепцию реляционной теории. В этом случае стандартный SQL определяет таблицу как имеющую хотя бы один столбец. Разработчики SQL решили, что таблица без столбцов не настолько интересна, чтобы оправдать поддержку языка SQL.

Если PostgreSQL или какая-либо другая реализация SQL решит разрешить таблицу без столбцов, они делают это как расширение стандартного SQL.

0 голосов
/ 02 сентября 2018

Вам необходимо добавить хотя бы один столбец:

CREATE TABLE `bmxData`.`new_table`(col INT);

Некоторые СУБД позволяют определять таблицу без явного пользовательского столбца, например PostgreSQL:

CREATE TABLE tab();

Демоверсия DBFiddle

...