表创建时的 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.connector.errors.ProgrammingError: 1064 (42000): 尝试创建表时 SQL 语法有错误