我使用的是Mysql v5.5.14,当我尝试执行时:
mysql> CREATE TABLE IF NOT EXISTS LONGBOW_products.universal_partname (
-> part_id SMALLINT(5) UNSIGNED NOT NULL DEFAULT 0,
-> PRIMARY KEY (part_id)
-> );
它给我一个错误:
ERROR 1005 (HY000): Can't create table 'LONGBOW_products.universal_partname' (errno: -1)
但是,当我尝试从表名中删除下划线时,它返回true:
mysql> CREATE TABLE IF NOT EXISTS LONGBOW_products.universal (
-> part_id SMALLINT(5) UNSIGNED NOT NULL DEFAULT 0,
-> PRIMARY KEY (`part_id`)
-> );
Query OK, 0 rows affected (0.00 sec)
我想知道你是否不能在更新版本的Mysql上使用表名中的下划线?
答案 0 :(得分:2)
不确定您是否解决了此问题。我用一个非常简单的CREATE语句得到了类似的问题:错误代码:1005。无法创建表'UCQ.country'(错误号:-1)。
根据http://dev.mysql.com/doc/refman/5.5/en/innodb-error-codes.html“如果错误消息引用错误-1,则表创建可能失败,因为该表包含与内部InnoDB表的名称匹配的列名。”
然而,当我查看mysql_error_log.err时,我解决了我的问题: 21107 18:23:19 InnoDB:创建文件'./ucq/country.ibd'时出错。 121107 18:23:19 InnoDB:文件操作中的操作系统错误号17。 InnoDB:错误号17表示“文件存在”。 InnoDB:一些操作系统错误号在下面描述 InnoDB:http://dev.mysql.com/doc/refman/5.5/en/operating-system-error-codes.html InnoDB:虽然相应的表没有,但文件已经存在 InnoDB:存在于InnoDB数据字典中。你搬了InnoDB吗? InnoDB:.ibd文件,不使用SQL命令 InnoDB:DISCARD TABLESPACE和IMPORT TABLESPACE,或者做过 InnoDB:mysqld在CREATE TABLE中间崩溃?您可以 InnoDB:删除文件'./ucq/country.ibd'解决问题 InnoDB:在MySQL的'datadir'下。
所以我刚刚删除了country.ibd,我的CREATE语句运行顺利。
答案 1 :(得分:0)
数据库和表名称不能包含“/”, “\”, “.”,
或文件名中不允许的字符。
参考:http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html
删除“。”来自表名