【问题标题】:Mysql statement is having syntax issueMysql 语句有语法问题
【发布时间】:2020-09-30 03:28:07
【问题描述】:

我在 MYSQL 查询下运行并收到此错误。有人可以在这里帮助我吗?我正在使用 xampp 运行 MySQL 并执行语句

#1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取在“NOT NULL”附近使用的正确语法, DeliveryMode varchar NOT NULL, 数量 int NOT NULL, 辣的'在第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)
);

【问题讨论】:

  • 'CHAR 和 VARCHAR 类型的声明长度表示要存储的最大字符数。' - dev.mysql.com/doc/refman/8.0/en/char.html ,如果仍然无法添加您的 FK 参考表,您需要提供菜名和送货方式的长度。

标签: mysql sql


【解决方案1】:

当你在 mysql 中定义 varchar 时,你必须提供它支持的最大长度。

因此,将使用varchar 作为数据类型的列(DishNameDeliveryMode)修改为适合它们的varchar(50)

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

【讨论】:

  • 我不认为它允许我,因为它是在 sql 语句中定义的外键
  • 对两个字段使用外部表中定义的具有相同长度的相同数据类型。如果您使用他们的 primary_key(如果是整数),则以相同的方式更改数据类型。
  • “我不认为它允许我......” 表示你还没有测试它@AsifAliKhan?
  • 您的解决方案不起作用@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)
);

【讨论】:

  • 这个答案是否提供了比现有答案更多的信息?如果是这样,如果您能对此进行一些解释,那就太好了。
  • 嗨 Ankit,我不认为添加最大长度会解决它,因为这些变量是下面在 mysql 语法中定义的外键。我认为还有其他问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 2011-10-17
  • 2016-09-03
  • 1970-01-01
相关资源
最近更新 更多