Оператор Mysql имеет проблему с синтаксисом

#mysql #sql

#mysql #sql

Вопрос:

Я запускаю ниже запроса MYSQL и получаю эту ошибку. Кто-нибудь может мне здесь помочь? Я использую xampp для запуска MySQL и выполнения инструкции

#1064 — У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с ‘NOT NULL, DeliveryMode varchar NOT NULL, Qty int NOT NULL, Spicy ‘ в строке 6

Ниже приведен мой запрос на создание таблицы

 CREATE TABLE Bag (
    BagId int NOT NULL AUTO_INCREMENT,
    DishName varchar NOT NULL,
    DeliveryMode varchar NOT NULL,
    Qty int NOT NULL DEFAULT 1,
    Spicy varchar(20) NULL,
    SpecialInstructionsFood varchar(250),
    BagStatus varchar(100) NOT NULL,
    DateCreated datetime DEFAULT current_timestamp(),
    DateUpdated datetime DEFAULT current_timestamp(),
    FOREIGN KEY(DishName) REFERENCES Dish(DishName),
    CONSTRAINT FK_DishName_Bag FOREIGN KEY(DishName)
    REFERENCES Dish(DishName),
    FOREIGN KEY(DeliveryMode) REFERENCES DeliveryModeType(Name),
    CONSTRAINT FK_DeliveryModeType_Bag FOREIGN KEY(DeliveryMode)
    REFERENCES DeliveryModeType(Name),
    FOREIGN KEY(Spicy) REFERENCES SpicyType(Name),
    CONSTRAINT FK_SpicyType_Bag FOREIGN KEY(Spicy)
    REFERENCES SpicyType(Name),
    FOREIGN KEY(BagStatus) REFERENCES BagStatusType(Name),
    CONSTRAINT FK_BagStatusType_Bag FOREIGN KEY(BagStatus)
    REFERENCES BagStatusType(Name),
    PRIMARY KEY (BagId)
);
  

Комментарии:

1. ‘Типы CHAR и VARCHAR объявляются с длиной, указывающей максимальное количество символов, которые вы хотите сохранить.’ — dev.mysql.com/doc/refman/8.0/en/char.html , вам необходимо указать длину для dishname и deliverymode, если все еще не удается добавить ваши справочные таблицы FK.

Ответ №1:

Когда вы определяете a varchar в mysql, вы должны указать максимальную длину, которую он поддерживает.

Поэтому измените свои столбцы ( DishName amp; DeliveryMode ), которые используются varchar в качестве типа данных, на что-то вроде varchar(50) того, что им подходит.

 DishName VARCHAR(50) NOT NULL, 
DeliveryMode VARCHAR(20) NOT NULL
  

Комментарии:

1. Я не думаю, что это позволило мне, потому что его внешний ключ определяется в операторе sql

2. Используйте тот же тип данных с той же длиной, которая определена во внешней таблице для обоих полей. Если вы используете их primary_key (если целое число), измените тип данных таким же образом.

3. «Я не думаю, что это позволило мне …» означает, что вы еще не тестировали его @AsifAliKhan?

4. Ваше решение не сработало @JitendraYadav. Но теперь я получил решение, на самом деле я пытался сослаться на таблицу, в которой первичный ключ не был объявлен.

Ответ №2:

 CREATE TABLE Bag (
    BagId int(11) NOT NULL AUTO_INCREMENT,
    DishName varchar(100) NOT NULL,
    DeliveryMode varchar(40) NOT NULL,
    Qty int(11) NOT NULL DEFAULT 1,
    Spicy varchar(20),
    SpecialInstructionsFood varchar(250),
    BagStatus varchar(100) NOT NULL,
    DateCreated datetime DEFAULT current_timestamp(),
    DateUpdated datetime DEFAULT current_timestamp(),
    FOREIGN KEY(DishName) REFERENCES Dish(DishName),
    CONSTRAINT FK_DishName_Bag FOREIGN KEY(DishName)
    REFERENCES Dish(DishName),
    FOREIGN KEY(DeliveryMode) REFERENCES DeliveryModeType(Name),
    CONSTRAINT FK_DeliveryModeType_Bag FOREIGN KEY(DeliveryMode)
    REFERENCES DeliveryModeType(Name),
    FOREIGN KEY(Spicy) REFERENCES SpicyType(Name),
    CONSTRAINT FK_SpicyType_Bag FOREIGN KEY(Spicy)
    REFERENCES SpicyType(Name),
    FOREIGN KEY(BagStatus) REFERENCES BagStatusType(Name),
    CONSTRAINT FK_BagStatusType_Bag FOREIGN KEY(BagStatus)
    REFERENCES BagStatusType(Name),
    PRIMARY KEY (BagId)
);
  

Комментарии:

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

2. Привет, Анкит, я не думаю, что добавление максимальной длины исправит это, потому что эти переменные являются внешним ключом, который определен ниже в синтаксисе mysql. Я думаю, что есть какая-то другая проблема.