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

StackOverflow https://stackoverflow.com/questions/3302476

Вопрос

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

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 — Таблица «тип контента» уже существует.

Это было полезно?

Решение

Похоже, у вас есть Таблица Шрёдингера...

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

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

Другие советы

от журнала 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.
.

Я получил эту же ошибку, а ремонтный стол (от ответа @ nulluserexception) не помог.

Я в конечном итоге нашел Это решение :

sudo mysqladmin flush-tables
.

Для меня без генеракодицетагкода я получил следующую ошибку:

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

(работает на ОС x 10.6)

Вам может потребоваться промыть кэш таблицы.Например:

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

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

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

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

<Сильное> решение :

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

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

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

DROP DATABASE `having_issues`;
.

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

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

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

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

Я сделал «вкусные столы», и это очистило проблему.

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

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

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

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

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

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

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

Окно -> Настройки -> Общие -> Рабочая область -> Новая текстовая линия разделитель.

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

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

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

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

drwx------   3 _mysql  wheel 
.

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

-rw-rw----   3 _mysql  wheel 
.

Извините, чтобы воскресить.

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

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

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

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

I had this same problem and it looks like the Database name was case sensitive. My Database is called:

Mydatabase

Whilst my script included

USE mydatabase

Once I changed the database name to the correct case it all seemed to work. Using MYSQL Workbench on MAC OSX

This problem also occurs if a 'view' (imaginary table) exists in database as same name as our new table name.

In my case I found this to be an issue with InnoDB; I never discovered what the actual problem was, but creating as a MyISAM allowed it to build

For me the problem was caused when using a filesystem copy of the mysql database directory instead of mysqldump. I have some very large tables, mostly MyISAM and a few InnoDB cache tables and it is not practical to mysqldump the data. Since we are still running MyISAM, XtraBackup is not an option.

The same symptoms as above happened to me. The table is not there, there are no files in the directory that pertain to the table, yet it cannot be created because MySQL thinks its there. Drop table says it's not there, create table says it is.

The problem occurred on two machines, both were fixed by copying backups. However, I noticed that in my backup that there was a .MYD and .MYI file, even though I was under the impression that these files are not used for InnoDB. The .MYD and .MYI files had an owner of root, while the .frm was owned by mysql.

If you copy from backup, check the file permissions. Flush tables might work, but I opted to shut down and restart the database.

Good luck.

gosh, i had the same problem with osCommerce install script until i figured out the mysql system has many databases and the create table query copies itself into each one and thus droping only the working table on active db didnt help, i had to drop the table from all dbs

My CREATE statement was part of staging env dump.

I did try everything that has been mentioned above. I DID NOT get solution. However my path to redemption was:

  1. I stumble upon the fact that (one of many in) the CREATE statement did get through when I rectified the database name case sensitivity. This clicked something. I repeated the same for the other tables.

  2. However a new error came into the scene. The straight quotes for 'comments' were throwing syntax error. I was shocked. replaced them but the new error started popping up. Finally i knew the solution.

SOLUTION: The dump i was using might have been from a different version of MySql. I got permission to connect to the staging MYsql using the local(installed on my machine) mysql workbench. I did not rdp into the staging server to login to staging mysql workbench. Created a dump from there. Ran the dump and it worked like a sweet.

Was trying to import a backup sql file but was getting the error; 1050 "Table already exists"

My setup was:

  • Windows 7
  • Mysql 5.5.16

Solution:

  1. Changed the server engine from InnoDB to MyISAM
  2. Using phpMyAdmin Deleted the database I was trying to import to
  3. Restarted the mysql service
  4. Tried the re-importation and it worked

Your disk also might just be full. (just had that)

In my case the problem was that there was a view with the same name as my table, so I had to drop the view to allow the import to continue.

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

An automated solution that worked for me is to replace the normal drop table with this sed during the dump to also drop any views that might exist:

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

Or if you would rather print to a file for backup

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

Or if you received the dumped file and you are importing it to your db

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

You get the idea

Note: it is important that you add the ^ at the beginning of the replacement regex, because there are other types of DROP TABLE IF EXISTS commands in dumps that you don't want to touch.

You go from having something like this:

--
-- 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` (
...

To having something like this:

--
-- 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` (
...

You won´t believe me! I´ve just removed a comment block from my .sql file and now it works.

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;

The deleted comment block was this:

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

I´ve left the problematic table alone in the same .sql file. After that I´ve removed comments, the only code was left, and the error disappears.

I've just had the same error but I knew the table already existed and wanted to add to it. I'm adding my answer as this question comes up as no.1 for me on google when looking for the same error but for a slightly different scenario. Basically I needed to tick

"Add DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT / TRIGGER statement"

And this solved the error for me.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top