Mysql 1050 Ошибка «Таблица уже существует», хотя на самом деле это не так - PullRequest
62 голосов
/ 21 июля 2010

Я добавляю эту таблицу:

CREATE TABLE contenttype (
        contenttypeid INT UNSIGNED NOT NULL AUTO_INCREMENT,
        class VARBINARY(50) NOT NULL,
        packageid INT UNSIGNED NOT NULL,
        canplace ENUM('0','1') NOT NULL DEFAULT '0',
        cansearch ENUM('0','1') NOT NULL DEFAULT '0',
        cantag ENUM('0','1') DEFAULT '0',
        canattach ENUM('0','1') DEFAULT '0',
        isaggregator ENUM('0', '1') NOT NULL DEFAULT '0',
        PRIMARY KEY (contenttypeid),
        UNIQUE KEY packageclass (packageid, class)
);

И я получаю 1050 "таблица уже существует"

Но таблица НЕ существует.Любые идеи?

РЕДАКТИРОВАТЬ: больше деталей, потому что все, кажется, не верят мне:)

DESCRIBE contenttype

приводит к:

1146 - Таблица 'gunzfact_vbforumdb.contenttype'не существует

и

CREATE TABLE gunzfact_vbforumdb.contenttype(
contenttypeid INT UNSIGNED NOT NULL AUTO_INCREMENT ,
class VARBINARY( 50 ) NOT NULL ,
packageid INT UNSIGNED NOT NULL ,
canplace ENUM( '0', '1' ) NOT NULL DEFAULT '0',
cansearch ENUM( '0', '1' ) NOT NULL DEFAULT '0',
cantag ENUM( '0', '1' ) DEFAULT '0',
canattach ENUM( '0', '1' ) DEFAULT '0',
isaggregator ENUM( '0', '1' ) NOT NULL DEFAULT '0',
PRIMARY KEY ( contenttypeid ) ,

Выход:

1050 - Таблица 'contenttype' уже существует

Ответы [ 25 ]

1 голос
/ 31 июля 2013

Мой оператор CREATE был частью промежуточного дампа env.

Я попробовал все, что было упомянуто выше. Я не получил решение. Однако мой путь к искуплению был:

  1. Я наткнулся на тот факт, что (один из многих в) оператор CREATE справился, когда я исправил чувствительность к регистру имени базы данных. Это что-то щелкнуло. Я повторил то же самое для других таблиц.

  2. Однако появилась новая ошибка. Прямые кавычки для «комментариев» вызывали синтаксическую ошибку. Я был потрясен. заменил их, но новая ошибка начала появляться. Наконец, я знал решение.

РЕШЕНИЕ: Дамп, который я использовал, мог быть из другой версии MySql. Я получил разрешение на подключение к промежуточному MYsql, используя локальный (установленный на моей машине) инструмент MySQL. Я не зашел в промежуточный сервер для входа в рабочую среду mysql. Создал дамп оттуда. Побежал на свалку и все заработало как сладкое.

1 голос
/ 19 июля 2013

Ты мне не поверишь! Я только что удалил блок комментариев из моего файла .sql, и теперь он работает.

CREATE DATABASE  IF NOT EXISTS `issga` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `issga`;
--
-- Table structure for table `protocolo`
--

DROP TABLE IF EXISTS protocolo;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
 CREATE TABLE protocolo (
  `idProtocolo` int(11) NOT NULL AUTO_INCREMENT,
  `tipo` varchar(30) DEFAULT NULL,
  `estado` int(2) DEFAULT 0,
  PRIMARY KEY (`idProtocolo`)
 ) ENGINE=InnoDB AUTO_INCREMENT=142 DEFAULT CHARSET=utf8;
 /*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `protocolo`
--

LOCK TABLES protocolo WRITE;
/*!40000 ALTER TABLE protocolo DISABLE KEYS */;
/* INSERT INTO `protocolo` VALUES () */
/*!40000 ALTER TABLE protocolo ENABLE KEYS */;
UNLOCK TABLES;

Удаленный блок комментариев был таким:

--
-- Table structure for table `protocolo`
-- 

Я оставил проблемную таблицу в одном и том же файле .sql. После этого я удалил комментарии, остался единственный код и ошибка исчезла.

1 голос
/ 22 августа 2012

Эта проблема также возникает, если в базе данных существует «представление» (воображаемая таблица) с тем же именем, что и имя новой таблицы.

1 голос
/ 06 октября 2012

В моем случае я обнаружил, что это проблема InnoDB; Я никогда не обнаруживал, в чем была проблема, но создание в качестве MyISAM позволило ему построить

0 голосов
/ 10 июля 2015

Ваш диск также может быть просто заполнен.(только что это было)

...