我在MySql中有以下代码块:
DROP TABLE IF EXISTS `account.info`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `account.info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`account_id` int(11) NOT NULL,
`year_id` int(11) NOT NULL,
`school_id` int(11) NOT NULL,
PRIMARY KEY (`id`,`account_id`,`year_id`,`school_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7177 DEFAULT CHARSET=utf8;
它在第一行给我错误:
ERROR 1103 (42000) at line 56: Incorrect table name 'account.info'
它有什么问题?
请帮帮我。
答案 0 :(得分:5)
来自http://dev.mysql.com/doc/refman/5.1/en/identifiers.html: “在MySQL 5.1.6之前,数据库和表名不能包含”/“,”\“,”。“或文件名中不允许的字符。”
这就是我给出这个答案的原因:
您不能在表名中使用点。点用于分隔数据库名称和表名称(和列名称)。如果您的数据库名称为`account`.`info`
且表名为account
,则可以尝试使用info
。如果表名应为account.info
,则应将其更改为其他内容,例如account_info
。我不同意其他一些答案:如果做得好,引用从不会受到伤害。
从5.1.6开始,你可以使用任何你喜欢的东西,如@eggyal和其他人所示。
答案 1 :(得分:3)
正如Schema Object Names所述:
在MySQL 5.1.6之前,数据库和表名不能包含“
/
”,“\
”,“.
”或文件名中不允许的字符。< / p>
顺便提一下,如果您想在名为info
的数据库中创建一个名为account
的表,请注意Identifier Qualifiers下的文档:
如果多部分名称的任何组件需要引用,请单独引用它们,而不是引用整个名称。例如,写
`my-table`.`my-column`
,而不是`my-table.my-column`
。
答案 2 :(得分:2)
试试这个:
DROP TABLE IF EXISTS account.info;
使用点时不要使用`。
或引用数据库名称和表名
DROP TABLE IF EXISTS `account`.`info`;
答案 3 :(得分:1)
您似乎想要创建并首先删除名为info的数据库帐户中的表。如果是这样,那就这样做:
DROP TABLE IF EXISTS `account`.`info`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `account`.`info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`account_id` int(11) NOT NULL,
`year_id` int(11) NOT NULL,
`school_id` int(11) NOT NULL,
PRIMARY KEY (`id`,`account_id`,`year_id`,`school_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7177 DEFAULT CHARSET=utf8;
答案 4 :(得分:1)
您在帐户account.info
中指定了一个名为info
的表,而不是一个名为db
的表。分别引用每个部分:
DROP TABLE IF EXISTS `account`.`info`;
如果您正在尝试创建一个名为account.info
的表,那么旧版本的MySQL将不允许在表名中使用.
。