【问题标题】:Drop Table if exists statement giving errorDrop Table if exists 语句给出错误
【发布时间】:2014-01-15 11:20:32
【问题描述】:

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'

这有什么问题?

请帮帮我。

【问题讨论】:

  • 可能是 ` Try to do a select statement on that table.
  • 我认为您的语法稍有偏差。请参阅here `DROP TABLE IF EXISTS 'account'.'info' dbname 和 table name 在单独的引号中。
  • 你为什么要关心表是否存在。只需运行DROP 语句即可捕获错误。然后创建。无论哪种方式,你都会得到你的结果......
  • @LOLSinger:您的数据库中似乎需要account_info 表,但account 数据库中不需要info 表。
  • @LOLSinger:将account.info 替换为account_info,它应该可以工作。

标签: mysql sql database


【解决方案1】:

来自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 和其他人所示。

【讨论】:

【解决方案2】:

Schema Object Names 中所述:

在 MySQL 5.1.6 之前,数据库和表名不能包含“/”、“\”、“.”或文件名中不允许的字符。

顺便说一句,您是否想在名为 account 的数据库中创建一个名为 info 的表,然后请注意,如 Identifier Qualifiers 下所述:

如果多部分名称的任何组成部分需要引用,请单独引用它们,而不是引用整个名称。例如,写`my-table`.`my-column`,而不是`my-table.my-column`

【讨论】:

【解决方案3】:

试试这个:

DROP TABLE IF EXISTS account.info;

使用点时不要使用`。

或者同时引用数据库名和表名

DROP TABLE IF EXISTS `account`.`info`;

【讨论】:

  • "在使用点时不要使用`" - 如果数据库名称是保留字,或者如果数据库/表名称中的任何一个包含一个字符需要引用吗?
  • accountinfo 都不是这些!但是我们应该做`db`。 `tbl` :)
  • @eggyal 你不应该使用保留字来命名数据库对象;)
  • 我只是说“应该”:D
  • 如果名称是另一种语言,是否应该有人使用`.`?
【解决方案4】:

您似乎想在数据库帐户中创建并首先删除一个名为 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;

【讨论】:

  • 这里在 CREATE TABLE account``info 上给了我错误 >>> ERROR 1049 (42000) at line 60: Unknown database 'account'
  • 那么你没有一个名为 account 的数据库。您想创建一个只命名为“account.info”的表吗?不要在名称中使用点。
  • 他当然可以,这只是避免问题的最简单的方法。
【解决方案5】:

您在帐户 db 中指定了一个名为 account.info 的表,而不是一个名为 info 的表。分别引用每个部分:

DROP TABLE IF EXISTS `account`.`info`;

如果您尝试创建一个名为 account.info 的表,那么旧版本的 MySQL 将不允许在表名中使用 .

【讨论】:

  • 这里它给了我关于 CREATE TABLE account 的错误``信息 >>> ERROR 1049 (42000) at line 60: Unknown database 'account'
  • @LOLSinger Singer 表名和数据库名是什么?
  • @LOLSinger 查看我的更新。在某些版本的 MySQL 中,您无法创建包含 . 的表。考虑改为account_info
猜你喜欢
  • 2020-12-19
  • 2016-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2015-05-16
相关资源
最近更新 更多