MySQL 语法错误中的 CREATE TABLE

Posted

技术标签:

【中文标题】MySQL 语法错误中的 CREATE TABLE【英文标题】:CREATE TABLE in MySQL syntax error 【发布时间】:2017-06-30 13:49:22 【问题描述】:

我正在尝试使用 db 将其与我的 java 项目链接 我正在使用 wampsarver 创建数据库。 请问我该怎么做才能解决这个问题。

1064 - 您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册以获取正确的语法使用 附近')不为空,PhoneDOUBLE(20)不为空,IdINT(20)不 第 6 行的 NULL AUTO_INCR'

CREATE TABLE `Laptop` (
`serial number ` INT( 20 ) NOT NULL ,
`Device Model` VARCHAR( 20 ) NOT NULL ,
`Device Manufacturer` VARCHAR( 20 ) NOT NULL ,
`Device Color` VARCHAR( 20 ) NOT NULL ,
`Screen size` DOUBLE( 20 ) NOT NULL ,
`Phone` DOUBLE( 20 ) NOT NULL ,
`Id` INT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
UNIQUE (
`serial number ` 
)
) ENGINE = innodb

【问题讨论】:

你真的习惯把auto_increment主键放在表的最后一列吗?通常,这是第一个。 不建议在列名中使用空格 【参考方案1】:

DOUBLE 也需要精度(我给了DOUBLE(20,2) - 根据需要更改)。

另外,serial number 列名末尾还有一个杂散空格。

CREATE TABLE `Laptop` (
`serial number` INT( 20 ) NOT NULL ,
`Device Model` VARCHAR( 20 ) NOT NULL ,
`Device Manufacturer` VARCHAR( 20 ) NOT NULL ,
`Device Color` VARCHAR( 20 ) NOT NULL ,
`Screen size` DOUBLE( 20,2) NOT NULL ,
`Phone` DOUBLE( 20 ,2) NOT NULL ,
`Id` INT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
UNIQUE (
`serial number` 
)
) 

另外,最好使用DECIMAL 而不是DOUBLE,因为无法准确表示双精度,并且在进行比较时会产生问题。

【讨论】:

【参考方案2】:

对于双精度,您必须在逗号后添加另一个数字以确保精度。此外,名称后不允许有空格。以下脚本正在运行

 CREATE TABLE `Laptop` (
 `serial number` INT( 20 ) NOT NULL ,
 `Device Model` VARCHAR( 20 ) NOT NULL ,
 `Device Manufacturer` VARCHAR( 20 ) NOT NULL ,
 `Device Color` VARCHAR( 20 ) NOT NULL ,
 `Screen size` DOUBLE( 20,4 ) NOT NULL ,
 `Phone` DOUBLE( 20,4 ) NOT NULL ,
 `Id` INT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  UNIQUE (
 `serial number` 
  )
  ) ENGINE = innodb

【讨论】:

以上是关于MySQL 语法错误中的 CREATE TABLE的主要内容,如果未能解决你的问题,请参考以下文章

CREATE TABLE 语句中的语法错误

SQL 语句“CREATE TABLE TRIP...”中的语法错误

为啥这个 MySQL CREATE TABLE 语句失败?

为了工作,我的 CREATE TABLE 中缺少啥? mysql 8.X

MariaDB/MySQL 中的 CREATE PROCEDURE 出现神秘错误

Mysql————基本sql语句