Drop表如果存在语句给出错误

时间:2014-01-15 11:20:32

标签: mysql sql database

我在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'

它有什么问题?

请帮帮我。

5 个答案:

答案 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将不允许在表名中使用.