表创建时的 MySQL 语法错误

Posted

技术标签:

【中文标题】表创建时的 MySQL 语法错误【英文标题】:MySQL Syntax Error on Table Creation 【发布时间】:2012-08-14 03:03:13 【问题描述】:

我正在尝试在 Filemaker -> mysql 转换脚本中使用此查询。表创建步骤直接来自 phpMyAdmin 导出,我在 DROP 语句中添加。

如果存在工件则删除表;

如果不存在“工件”则创建表
  (
     `aid` INT(11) UNSIGNED NOT NULL auto_increment,
     `入藏号` TEXT NOT NULL,
     `name` TEXT NOT NULL,
     `period 1` TEXT NOT NULL,
     `period 3 date` TEXT NOT NULL,
     `视觉描述` TEXT NOT NULL,
     `religion 1` TEXT NOT NULL,
     `dimen 1 number` DECIMAL(10, 2) NOT NULL,
     `dimen 2 number` DECIMAL(10, 2) NOT NULL,
     `dimen 3 number` DECIMAL(10, 2) NOT NULL,
     `dimen 1 type` TEXT NOT NULL,
     `dimen 2 type` TEXT NOT NULL,
     `dimen 3 type` TEXT NOT NULL,
     `材料 2` TEXT NOT NULL,
     `制造过程 2` TEXT NOT NULL,
     `重量` INT(11) 非空,
     `测量备注` TEXT NOT NULL,
     `munsell 颜色信息` TEXT NOT NULL,
     `reproduction` TEXT NOT NULL,
     `复制说明` TEXT NOT NULL,
     `发布的描述` TEXT NOT NULL,
     `学术笔记` TEXT NOT NULL,
     `参考书目` TEXT NOT NULL,
     `comparanda` TEXT NOT NULL,
     `展览标签` TEXT NOT NULL,
     `艺术家` TEXT NOT NULL,
     `spurlock loc 3` TEXT NOT NULL,
     `考古数据` TEXT NOT NULL,
     `credit line` TEXT NOT NULL,
     `出处` TEXT NOT NULL,
     `博物馆奉献` TEXT NOT NULL,
     `spurlock status` TEXT NOT NULL,
     `public description` TEXT NOT NULL,
     `工作集 5 wb` TEXT NOT NULL,
     `图片来源` TEXT NOT NULL,
     `cm mec ma` TEXT NOT NULL,
     `webprivate` 文本不为空,
     `spurlock loc 2` TEXT NOT NULL,
     `hiresimagecheck` 文本不为空,
     主键(`aid`),
     FULLTEXT KEY `name` (`name`),
     FULLTEXT KEY `accession number` (`accession number`, `name`, `period 1`,
     `视觉描述`,`材料2`,`已发表的描述`,`艺术家`,
     `信用额度`),
     FULLTEXT KEY `accession number_2` (`accession number`),
     FULLTEXT KEY `visual description` (`visual description`),
     FULLTEXT KEY `published description` (`published description`)
  )
引擎=myisam
默认字符集=latin1
自动增量=1;

如果存在文化,则删除表;

如果不存在“文化”则创建表
  (
     `cid` INT(10) UNSIGNED NOT NULL auto_increment,
     `culture` VARCHAR(255) NOT NULL,
     主键(`cid`),
     唯一键`文化`(`文化`)
  )
引擎=myisam
默认字符集=latin1
自动增量=1;

如果存在地理城市,则删除表;

如果不存在 `geocity` 则创建表
  (
     `gid` INT(10) UNSIGNED NOT NULL auto_increment,
     `city` VARCHAR(255) NOT NULL,
     主键(`gid`),
     唯一键“城市”(“城市”)
  )
引擎=myisam
默认字符集=latin1
自动增量=1;

如果存在地理大陆,则删除表;

如果不存在`geocontinent`,则创建表
  (
     `gid` INT(10) UNSIGNED NOT NULL auto_increment,
     `continent` VARCHAR(255) NOT NULL,
     主键(`gid`),
     唯一键“大陆”(“大陆”)
  )
引擎=myisam
默认字符集=latin1
自动增量=1;

如果存在地理国家,则删除表;

如果不存在`geocountry`,则创建表
  (
     `gid` INT(10) UNSIGNED NOT NULL auto_increment,
     `country` VARCHAR(255) NOT NULL,
     主键(`gid`),
     唯一键“国家”(“国家”)
  )
引擎=myisam
默认字符集=latin1
自动增量=1;

DROP TABLE IF EXISTS geolocality;

如果不存在`geolocality`,则创建表
  (
     `gid` INT(10) UNSIGNED NOT NULL auto_increment,
     `locality` VARCHAR(255) NOT NULL,
     主键(`gid`),
     唯一键`locality`(`locality`)
  )
引擎=myisam
默认字符集=latin1
自动增量=1;

如果存在地理区域,则删除表;

如果不存在 `georegion` 则创建表
  (
     `gid` INT(10) UNSIGNED NOT NULL auto_increment,
     `region` VARCHAR(255) NOT NULL,
     主键(`gid`),
     唯一键 `region` (`region`)
  )
引擎=myisam
默认字符集=latin1
自动增量=1;

如果存在名称类别,则删除表;

如果不存在`nomcategory`,则创建表
  (
     `nid` INT(10) UNSIGNED NOT NULL auto_increment,
     `category` VARCHAR(255) NOT NULL,
     主键(`nid`),
     唯一键 `category` (`category`)
  )
引擎=myisam
默认字符集=latin1
自动增量=1;

如果存在 nomclassification 则删除表;

如果不存在“nomclassification”则创建表
  (
     `nid` INT(10) UNSIGNED NOT NULL auto_increment,
     `分类` VARCHAR(255) NOT NULL,
     主键(`nid`),
     唯一键`分类`(`分类`)
  )
引擎=myisam
默认字符集=latin1
自动增量=1;

如果存在 nomsubclassification 则删除表;

如果不存在“nomsubclassification”,则创建表
  (
     `nid` INT(10) UNSIGNED NOT NULL auto_increment,
     `subclassification` VARCHAR(255) NOT NULL,
     主键(`nid`),
     UNIQUE KEY `subclassification` (`subclassification`)
  )
引擎=myisam
默认字符集=latin1
自动增量=1; 

但是,当我尝试执行此查询时,我得到:

MySQL 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在“CREATE TABLE IF NOT EXISTS `artifacts` 附近使用的正确语法
  (
     `aid` IN' 在第 3 行

语法对我来说都很好,有人能发现错误吗?我使用的唯一 SQL 格式化程序不会报告任何错误。

【问题讨论】:

我习惯了 NUMBER 不是 INT,VARCHAR 不是 TEXT - 大小...... 我在我的 MySQL 服务器上试过你的脚本,它工作正常。 您的脚本运行良好。 SEE HERE @ SQLFiddle 【参考方案1】:
    您的用户名是否有权创建表?

    您是否指明要使用哪个数据库?我经常这样做

    USE databasename;
    
    CREATE TABLE tablename (
    name_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
     (etc....)
    );
    

等等。

【讨论】:

【参考方案2】:

您的脚本运行良好。问题要么是您执行它的方式(客户端会期望逐个查询而不是整个脚本),要么您已将分隔符更改为 ;

DELIMITER ;

【讨论】:

啊,你说得对。 PHP 的mysql_query() 不支持多查询。谢谢。

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

MySQL 创建表 IF NOT EXISTS 语法错误

使用 JSON 数组作为值时的 MySQL 语法错误

mysql.connector.errors.ProgrammingError: 1064 (42000): 尝试创建表时 SQL 语法有错误

创建存储过程时的语法错误

编写查询时的 SQL 语法错误

即使创建表的语法正确,我的 sql 中也会出现错误 1064