2010-07-21 6 views
55

я добавляю эту таблицу:Mysql 1050 Ошибка «Таблица уже существует», когда на самом деле, это не

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 «таблица уже существует»

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

EDIT: более подробно, потому что все, кажется, не верит мне :)

DESCRIBE contenttype 

урожайности:

1146 - Table 'gunzfact_vbforumdb.contenttype' doesn't exist

и

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 - Table 'contenttype' already exists

+5

Как вы определяете, что это уже не существует? –

+0

Вы работаете в базе данных, которую собираетесь создать в таблице? Также попробуйте запустить 'DESCRIBE contenttype' и посмотреть, действительно ли оно существует. – BoltClock

+1

Почему вы так уверены, что его не существует? – Fosco

ответ

53

Похоже, у вас есть Schroedinger's table ...

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

  • DROP TABLE IF EXISTS contenttype
  • REPAIR TABLE contenttype
  • Если у вас есть достаточное количество разрешений, удалять файлы данных (в/MySQL/данных/db_name)
+1

> REPAIR TABLE CONTENTTYPE USE_FRM дает gunzfact_vbforumdb.CONTENTTYPE \t \t ремонта Ошибки \t Не удается открыть таблицу gunzfact_vbforumdb.contenttype \t ремонта \t \t статуса Операции не Так мы становимся ближе, но до сих пор нет разрешения. Я не знаю, нужны ли данные в таблице, есть ли другой способ ее исправить? Я тоже бежал с миисамчком. – Citizen

+0

Может ли доступ к файлам * .myi, * .myd, * .frm для таблиц? – NullUserException

+0

Я не уверен, что вы имеете в виду – Citizen

2

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

+1

Определенно правый db, проверьте измененную информацию выше. – Citizen

2

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

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

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

Window -> Preferences -> General -> Workspace -> New text file line delimiter.

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

File -> Convert Line Delimiters To

10

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

DROP TABLE IF EXISTS `tablename` ; 
FLUSH TABLES `tablename` ; /* or exclude `tablename` to flush all tables */ 
CREATE TABLE `tablename` ... 
+1

спасибо, вы меня спасли, некоторые из того, как моя схема получила corupt (я не могу ее удалить), поэтому я удаляю все файлы, но продолжаю получать такую ​​же ошибку, пока я не пробовал это –

+0

, не забудьте перезапустить свои SQL-сервисы. – IRvanFauziE

+0

Это работа для меня! – Rubendob

12

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

В конце концов я нашел this solution:

sudo mysqladmin flush-tables 

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

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

(Запуск на OS X 10.6)

+1

Спасибо, 'sudo mysqladmin flush-tables' исправил проблему для меня. – vit

2

Я это такой же случай. Проблема заключалась в разрешении родительского каталога.

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

drwx------ 3 _mysql wheel 

было недостаточно, нужно было быть:

-rw-rw---- 3 _mysql wheel 

К сожалению воскресить.

1

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

Mydatabase 

Хотя мой сценарий включены

USE mydatabase 

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

1

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

28

из MySQL Вход:

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. 
+0

Это сработало для меня. Но нужно повторять для всех таблиц в моей базе данных. –

+0

Да, похоже, это может быть вызвано изменением таблицы InnoDB на MyISAM с использованием ALTER TABLE ** engine MyISAM. mysqlhotcopy, возможно, также участвовала в создании моей проблемы, так как она не работает с таблицами InnoDB, и это, возможно, все еще было InnoDB, когда я впервые выполнил команду. – deepwinter

+0

тоже работал для меня, +1 – Johannes

3

Я имел эту проблему на Win7 в Sql Maestro для MySql 12,3. Огромное раздражение, шоу-стоп на самом деле. Ничто не помогло, даже не отбросило и не воссоздало базу данных. У меня есть такая же настройка на XP, и она работает там, поэтому, прочитав ваши ответы о разрешениях, я понял, что это должны быть разрешения Win7. Поэтому я запускал MySql как администратор, и хотя Sql Maestro запускался нормально, ошибка исчезла. Таким образом, это должно было быть проблемой разрешения между Win7 и MySql.

1

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

+0

В ответ на jmadsen (может быть, немного поздно ....) У меня была такая же проблема, и причина в том, что таблица была создана в хранилище InnoDB, и файл .frm для корреспонденции был удален за пределами MySQL. Поэтому я восстановил файл .frm из резервной копии, и мне удалось восстановить/удалить/воссоздать таблицу. С уважением, Roland Leurs –

4

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

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

+0

не работал для меня. Изменен глобальный движок MySQL от InnoDB до MyISAM - та же проблема существует/не существует. MySQL сервер работает в Windows 2003. – Paktas

3

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

Я сделал «FLUSH TABLES», и он очистил проблему.

4

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

DROP DATABASE `having_issues`; 

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

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

+1

Я также работал над всеми остальными идеями, которые я видел здесь, но это был единственный, который работал. По-видимому, база данных в текущих версиях MySQL (по крайней мере, на моей установке WAMPP) имеет некоторую кешированную информацию, из-за которой невозможно просто исправить ее, удалив потерянный файл 'ibd'. Скрытые таблицы, REPAIR TABLE и т. Д. Тоже не работали. – Domi

1

Вы не поверите мне! Я просто удаляю блок комментариев из моего .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` 
-- 

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

1

Инструкция My CREATE была частью промежуточной смены env.

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

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

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

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

1

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

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

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

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

Удачи.

3

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

Решение:

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

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

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

1

Гоша, я была такая же проблема с osCommerce установить скрипт, пока я не понял, система MySQL имеет множество баз данных и create table копии запроса себя в каждой из них и, таким образом Droping только рабочий стол на активной БД не помогло, я должен был удалить таблицу из всех dbs

1

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

Моя установка была:

  • Windows 7
  • Mysql 5.5.16

Решение:

  1. Измененный двигатель сервера с InnoDB в MyISAM
  2. Использование phpMyAdmin Удалена база данных I w как пытаться импортировать
  3. перезапустил службу MySQL
  4. Пробовал реимпорта, и она работала
1

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

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

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

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

0

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

+0

Я не знаю, почему кто-то остановил вас. Я рад видеть больше ответов на другие вопросы, которые могут быть для тех, кто находит это в Google. – Citizen

2

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

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

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

+0

Это сработало для меня, и сначала отбросило стол. Благодаря :) – RustyIngles

1

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

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

Автоматизированное решение, которое работало для меня, чтобы заменить обычную таблицу падения с этим СЭДОМ во время сброса также уронить любые мнения, которые могут существовать:

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` (
... 
Смежные вопросы