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 ]

2 голосов
/ 25 октября 2010

У меня была такая же проблема в Mac OS X и MySQL 5.1.40.Я использовал eclipse для редактирования своего сценария SQL, а затем попробовал MySQLWorkbench 5.2.28.Вероятно, он преобразовал символы новой строки в формат Mac.Я понятия не имел, что не так с моим сценарием, пока не закомментировал первую строку в файле.После этого этот скрипт был интерпретирован mysql как единый комментарий.Я использовал встроенное приложение TextEdit Mac, чтобы исправить это.После того, как разрывы строк были преобразованы в правильный формат, ошибка 1050 исчезла.

Обновление для пользователей Eclipse:

Чтобы установить окончание по умолчанию для новых созданных файлов, черезвсе рабочее пространство:

Окно -> Параметры -> Общее -> Рабочее пространство -> Новый разделитель строк текстового файла.

Чтобы преобразовать существующие файлы, откройте файл для редактирования идля редактируемого файла перейдите в меню:

Файл -> Преобразовать разделители строк в

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

Сначала проверьте, находитесь ли вы в нужной базе данных USE yourDB и попробуйте Select * from contenttype, просто чтобы посмотреть, что это такое и действительно ли оно существует ...

2 голосов
/ 04 сентября 2015

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

Мое решение состояло в том, чтобы удалить файлы ib_logfil0, ib_logfile1, ibdata1 и auto.cnf из папки данных MySQL;убедитесь, что сначала остановили службу MySQL перед удалением этих файлов.

Затем после перезапуска службы MySQL воссоздал эти файлы, и я смог запустить скрипт резервного копирования, в котором были сохранены все мои CREATE файлы (sqldumpфайл).

1 голос
/ 08 мая 2019

У меня была такая же ошибка, но я знал, что таблица уже существует, и хотел добавить к ней. Я добавляю свой ответ, так как этот вопрос для меня в Google выглядит как № 1 при поиске той же ошибки, но по немного другому сценарию. В основном мне нужно было поставить галочку

«Добавить оператор DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT / TRIGGER»

И это решило для меня ошибку.

1 голос
/ 22 июня 2017

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

drop view `my-view-that-has-same-name-as-table`;

Автоматизированное решение, которое сработало для меня, заключается в замене обычной таблицы перетаскивания этим sed во время дампа, чтобы также отбрасывать любые существующие представления:

mysqldump my-db \
| sed -E 's/^DROP TABLE IF EXISTS(.+)$/\0 DROP VIEW IF EXISTS\1/g' \
| mysql my-other-db

Или, если вы предпочитаете печатать в файл для резервного копирования

mysqldump my-db \
| sed -E 's/^DROP TABLE IF EXISTS(.+)$/\0 DROP VIEW IF EXISTS\1/g' \
> my-db.dump.sql

Или, если вы получили дамп-файл и импортируете его в свою базу данных

cat my-db.dump.sql \
| sed -E 's/^DROP TABLE IF EXISTS(.+)$/\0 DROP VIEW IF EXISTS\1/g' \
| mysql my-other-db

Вы поняли идею

Примечание: важно добавить ^ в начале регулярного выражения замены, потому что в дампах есть другие типы команд DROP TABLE IF EXISTS, которые вы не хотите трогать.

У вас не получается что-то вроде этого:

--
-- Table structure for table `my_table`
--

DROP TABLE IF EXISTS `my_table`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `my_table` (
...

Чтобы иметь что-то вроде этого:

--
-- Table structure for table `my_table`
--

DROP TABLE IF EXISTS `my_table`; DROP VIEW IF EXISTS `my_table`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `my_table` (
...
1 голос
/ 13 августа 2014

пытался импортировать резервный файл sql, но получал ошибку;1050 «Таблица уже существует»

Моя настройка была:

  • Windows 7
  • Mysql 5.5.16

Решение:

  1. Изменен механизм сервера с InnoDB на MyISAM
  2. Использование phpMyAdmin Удалил базу данных, которую я пытался импортировать в
  3. Перезапустил службу mysql
  4. Попробовалреимпорт и все заработало
1 голос
/ 19 августа 2014

У меня были огромные проблемы с ошибками 1050 и 150.

Проблема для меня заключалась в том, что я пытался добавить ограничение с ON DELETE SET NULL в качестве одного из условий.

Изменение на ON DELETE NO ACTION позволило мне добавить необходимые ограничения FK.

К сожалению, сообщения об ошибках MySql совершенно бесполезны, поэтому мне пришлось искать это решение многократно и с помощью ответов на вопрос выше.

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

У меня была такая же проблема, и похоже, что имя базы данных чувствительно к регистру. Моя база данных называется:

Mydatabase

Пока мой сценарий включен

USE mydatabase

Как только я изменил имя базы данных на правильный регистр, казалось, что все работает. Использование MYSQL Workbench на MAC OSX

1 голос
/ 30 апреля 2014

Черт возьми, у меня была такая же проблема с osCommerce установочным скриптом, пока я не выяснил, что система mysql имеет много баз данных, и запрос create table копирует себя в каждую и, таким образом, удаление только рабочей таблицы на активной базе данных не помогло, мне пришлось сбросить стол со всех дбс

1 голос
/ 12 августа 2013

Для меня проблема возникла при использовании копии файловой системы каталога базы данных mysql вместо mysqldump.У меня есть несколько очень больших таблиц, в основном MyISAM и несколько таблиц кеша InnoDB, и mysqldump не практично использовать для данных.Поскольку мы все еще работаем с MyISAM, XtraBackup не вариант.

Со мной случились те же симптомы, что и выше.Таблицы нет, в каталоге нет файлов, которые относятся к этой таблице, но ее нельзя создать, потому что MySQL считает, что она там.Drop table говорит, что это не там, создать таблицу говорит, что это так.

Проблема возникла на двух машинах, обе были исправлены путем копирования резервных копий.Однако я заметил, что в моей резервной копии были файлы .MYD и .MYI, хотя у меня сложилось впечатление, что эти файлы не используются для InnoDB.Файлы .MYD и .MYI имеют владельца root, а файл .frm принадлежит mysql.

Если вы копируете из резервной копии, проверьте права доступа к файлу.Сброс таблиц может работать, но я решил закрыть и перезапустить базу данных.

Удачи.

...