第二个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 表创建错误