#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. Я думаю, что есть какая-то другая проблема.