第二个CREATE语句上的Mysql创建表错误[重复]

Posted

技术标签:

【中文标题】第二个CREATE语句上的Mysql创建表错误[重复]【英文标题】:Mysql Create Table error on second CREATE statement [duplicate] 【发布时间】:2018-08-05 08:49:36 【问题描述】:

我正在尝试编写一个脚本来导入 mysql 数据库结构。我已经通过 phpMyAdmin 和 node npm model sqldump 导出了数据库 SQL。尝试创建第二个表时,两者都会产生相同的错误。这似乎不是特定于表的——我可以混合这些表(我在这个数据库中有 20 个表)并且总是在第二个 CREATE TABLE 语句上遇到相同的错误。

谁能指出我缺少的一些愚蠢的东西吗?

错误是:

 Error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'CREATE TABLE IF NOT EXISTS `autoresponses` (
  `id` bigint(20) NOT NULL AUTO_INC' at line 14
    at PromiseConnection.query (D:\dev-mysql-update\node_modules\mysql2\promise.js:75:20)
    at D:\dev-mysql-update\index.js:157:7
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
  message: 'You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near \'CREATE TABLE IF NOT EXISTS `autoresponses` (\n  `id` bigint(20) NOT NULL AUTO_INC\' at line 14',
  code: 'ER_PARSE_ERROR',
  errno: 1064,
  sqlState: '#42000' 

前两个表是:

CREATE TABLE IF NOT EXISTS `autoresponders` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `uuid` char(36) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
  `archived` tinyint(1) NOT NULL DEFAULT '0',
  `title` varchar(255) DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  `deleted_at` datetime DEFAULT NULL,
  `client_id` bigint(20) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `client_id` (`client_id`),
  CONSTRAINT `autoresponders_ibfk_1` FOREIGN KEY (`client_id`) REFERENCES `clients` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `autoresponses` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `uuid` char(36) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
  `archived` tinyint(1) NOT NULL DEFAULT '0',
  `hours_delay` int(11) DEFAULT NULL,
  `status` varchar(255) DEFAULT 'active',
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  `deleted_at` datetime DEFAULT NULL,
  `autoresponder_id` bigint(20) DEFAULT NULL,
  `notification_id` bigint(20) DEFAULT NULL,
  `client_id` bigint(20) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `autoresponses_autoresponder_id_notification_id_unique` (`autoresponder_id`,`notification_id`),
  KEY `notification_id` (`notification_id`),
  CONSTRAINT `autoresponses_ibfk_1` FOREIGN KEY (`autoresponder_id`) REFERENCES `autoresponders` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `autoresponses_ibfk_2` FOREIGN KEY (`notification_id`) REFERENCES `notifications` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

提前致谢, 安迪

【问题讨论】:

你是如何执行这些语句的? 您好罗伯特,感谢您回复我。从文本文件中读取内容后,我正在使用 node-mysql2。发布后我确实想知道这一点,所以我尝试了一个简单的命令行导出并导入到一个新的数据库中,它工作正常。所以我怀疑这是某种字符编码的东西。但是文本文件和node-mysql都使用UTF8,所以我不确定这个区域是否还有我遗漏的东西。 实际上,我可能会尝试跳过对文本文件的离散读取,而只需使用直接从文件中读取的预先存在的节点模块之一(例如,node-mysql-importer 或 execsql ),或者甚至可以直接通过节点 child_process.execSync 执行 mysql 二进制文件——这样就可以避免中间步骤。 罗伯特,你就是那个人。就是这样。不敢相信我在通读时错过了这一点。非常感谢您的帮助。 【参考方案1】:

您的表名应该在括号内。

【讨论】:

谢谢乔尔,但我很确定这是不对的,除非我误解了你的意思? dev.mysql.com/doc/refman/5.7/en/creating-tables.html 是的,很抱歉让你走错路了。 没问题 - 感谢任何旨在提供帮助的支持。

以上是关于第二个CREATE语句上的Mysql创建表错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 5.5.9 和 TYPE 上的 Hibernate 表创建错误

SQL语法基础之create

oracle 12c创建用户错误

sql sever怎么查看之前的建表语句

ORACLE中,创建一个新表,所有字段和数据均来源于另一个表。

CREATE TABLE 语句中的语法错误