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 ]

66 голосов
/ 21 июля 2010

Звучит так, как будто у вас есть Стол Шредингера ...

Серьезно, у вас, вероятно, сломанный стол.Попробуйте:

  • DROP TABLE IF EXISTS contenttype
  • REPAIR TABLE contenttype
  • Если у вас достаточно прав, удалите файлы данных (в / mysql / data / db_name)
30 голосов
/ 23 августа 2012

из MySQL Log:

InnoDB: You can drop the orphaned table inside InnoDB by
InnoDB: creating an InnoDB table with the same name in another
InnoDB: database and copying the .frm file to the current database.
InnoDB: Then MySQL thinks the table exists, and DROP TABLE will
InnoDB: succeed.
14 голосов
/ 23 ноября 2010

Я получил эту же ошибку, и REPAIR TABLE (из ответа @ NullUserException) не помог.

Я в итоге нашел это решение :

sudo mysqladmin flush-tables

Для меня без sudo я получил следующую ошибку:

mysqladmin: refresh failed; error: 'Access denied; you need the RELOAD privilege for this operation'

(работает на OS X 10.6)

11 голосов
/ 21 ноября 2010

Возможно, вам нужно очистить кеш таблицы.Например:

DROP TABLE IF EXISTS `tablename` ;
FLUSH TABLES `tablename` ; /* or exclude `tablename` to flush all tables */
CREATE TABLE `tablename` ...
4 голосов
/ 01 июня 2013

Обнаружив ту же проблему (создайте таблицу InnoDB), это то, что в итоге сработало для меня:

DROP DATABASE `having_issues`;

Я проверил на основе файлов разрешения, попытался отремонтировать и очистить, но ничего не получилось.

Так что, если это опция, переместите все рабочие таблицы в другую БАЗУ ДАННЫХ, удалите старую (возможно, вам придется вручную удалить любые файлы из папки базы данных, прежде чем перестанет работать) , переименуйтеновый, и вы «должны» вернуться на свой путь.Очевидно, что все, что «кэшируется» с использованием InnoDB, отбрасывается вместе с исходной базой данных.

4 голосов
/ 17 октября 2012

Я боролся с этим весь день: у меня есть Perl-скрипт, который создает набор таблиц, сначала над ними DROP IF EXISTS ..., а затем CREATE. DROP удалось, но на CREATE я получил это сообщение об ошибке: table already exists

Наконец-то я дошел до сути: в новой версии MySQL, которую я использую, по умолчанию используется движок InnoDB ("show engine \ G;"), я изменил его в файле my.cnf на значение по умолчанию MyISAM , перезапустил MySQL, и теперь я больше не получаю ошибку «таблица уже существует».

3 голосов
/ 15 сентября 2012

У меня была эта проблема на Win7 в Sql Maestro для MySql 12.3.Чрезвычайно раздражающий, выставочный ограничитель фактически.Ничего не помогало, даже не сбрасывая и не воссоздавая базу данных.У меня есть такая же настройка на XP, и она там работает, поэтому после прочтения ваших ответов о разрешениях я понял, что это должны быть разрешения Win7.Поэтому я запустил MySql от имени администратора, и хотя Sql Maestro работал нормально, ошибка исчезла.Так что, должно быть, проблема с правами доступа между Win7 и MySql.

3 голосов
/ 23 декабря 2013

Та же проблема возникла у меня при создании представления.Представление присутствовало ранее, из-за некоторых изменений оно было удалено, но когда я попытался добавить его снова, оно показывало мне сообщение об ошибке «представление уже существует».

Решение :

Вы можете сделать одну вещь вручную.

  1. Перейдите в папку MySQL, где вы ее установили
  2. Перейдите в папку данных внутри нее.
  3. Выберитевашей базы данных и зайдите в нее.
  4. База данных создает файлы формата ".frm".
  5. удалите файл конкретной таблицы.
  6. Теперь создайте таблицу снова.

Будет успешно создана таблица.

3 голосов
/ 27 мая 2013

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

Я сделал "FLUSH TABLES", и это решило проблему.

2 голосов
/ 23 апреля 2012

У меня был такой же случай.Проблема закончилась тем, что разрешения для родительского каталога.

Я копировал файлы в mysql и из него во время тестирования.

drwx------   3 _mysql  wheel 

было недостаточно, необходимо было:

-rw-rw----   3 _mysql  wheel 

Извините, что воскресил.

...