【问题标题】:How to represent float values in SQL如何在 SQL 中表示浮点值
【发布时间】:2019-04-28 12:41:08
【问题描述】:

我正在尝试在命令行中使用 MySQL 在 Ubuntu 中创建一个数据库,我需要创建一个包含以下数据的表:

CREATE TABLE Vehicles (
     Vehicle_ID int NOT NULL,
     Vehicle_Type VARCHAR(255) NOT NULL,
     Model_name VARCHAR(255) NOT NULL,
     Engine_Size float(1,1) NOT NULL,
     Condition VARCHAR(255) NOT NULL,
     Price float(9,2) NOT NULL,
     PRIMARY KEY (Vehicle_ID)
);

它只返回一个错误,上面写着“ERROR 1064 (42000): You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'Condition varchar(255) NOT 附近使用的正确语法空值, 价格浮动(9,2)不为空, 主键(第 6 行的车辆'

我的代码有什么问题? “Price”和“Engine_Size”列只能是浮点/十进制值,因此它们不能是 varchar,因为我只想能够插入数字。

【问题讨论】:

  • CONDITIONreseved word
  • ConditionMySQL reserved word,必须用反引号括起来才能用作列名。
  • @HarryStanford 无关,但您确实需要将这些更改为 DECIMAL 列。 FLOATDOUBLE 应该很少使用,并且只能通过慎重选择使用。

标签: mysql sql database


【解决方案1】:

这行得通:

CREATE TABLE Vehicles (
     Vehicle_ID int NOT NULL,
     Vehicle_Type VARCHAR(255) NOT NULL,
     Model_name VARCHAR(255) NOT NULL,
     Engine_Size int NOT NULL,
     Vehicle_Condition VARCHAR(255) NOT NULL,
     Price numeric(9,2) NOT NULL,
     PRIMARY KEY (Vehicle_ID)
);

注意事项:

  • 对于Price,您似乎需要numeric,而不是float,因为您要指定精度和比例。
  • 对于Engine_Size,我不知道float(1, 1) 应该是什么意思。我猜int 是一个合适的类型。
  • Condition是MySQL中的保留字,所以我改了列名。

【讨论】:

  • 我猜Engine_Size 应该是numeric(2,1)
  • 这不是与我结束的问题的重复吗? FLOAT(M,D) 是完全有效的 MySQL,表定义中的 only 错误是使用保留字 Condition 可以通过用反引号括起来来修复,如副本中所述。跨度>
【解决方案2】:

您的代码中唯一明显的问题是使用“条件”作为列名,因为condition 是 MySQL 中的保留字。 您可以通过两种方式修复它:

  • 不要使用“条件”作为列名:
CREATE TABLE Vehicles (
     Vehicle_ID int NOT NULL,
     Vehicle_Type VARCHAR(255) NOT NULL,
     Model_name VARCHAR(255) NOT NULL,
     Engine_Size float(1,1) NOT NULL,
     V_Condition VARCHAR(255) NOT NULL,       //Just an example feel free to use any another name
     Price float(9,2) NOT NULL,
     PRIMARY KEY (Vehicle_ID)
);
  • 将“条件”放在反引号 (``) 中
CREATE TABLE Vehicles (
     Vehicle_ID int NOT NULL,
     Vehicle_Type VARCHAR(255) NOT NULL,
     Model_name VARCHAR(255) NOT NULL,
     Engine_Size float(1,1) NOT NULL,
     `Condition` VARCHAR(255) NOT NULL,
     Price float(9,2) NOT NULL,
     PRIMARY KEY (Vehicle_ID)
);

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多