I’m adding this table:
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)
);
And I get a 1050 «table already exists»
But the table does NOT exist. Any ideas?
EDIT: more details because everyone seems to not believe me
DESCRIBE contenttype
yields:
1146 — Table ‘gunzfact_vbforumdb.contenttype’ doesn’t exist
and
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 ) ,
Yields:
1050 — Table ‘contenttype’ already exists
If you’re getting an error that reads something like “ERROR 1050 (42S01): Table ‘customers’ already exists” when trying to create a table in MySQL, it’s probably because there’s already a table in the database with the same name.
To fix this issue, either change the name of the table you’re trying to create, or check the existing table to see if it’s the one you actually need.
Example of Error
Here’s an example of code that produces the error:
CREATE TABLE Customers (
CustomerId int NOT NULL PRIMARY KEY,
CustomerName varchar(60) NOT NULL
);
Result:
ERROR 1050 (42S01): Table 'customers' already exists
In this case, I’m trying to create a table called Customers
, but it already exists in the database.
Solution 1
The most obvious solution is to change the name of the table we’re creating:
CREATE TABLE Customers2 (
CustomerId int NOT NULL PRIMARY KEY,
CustomerName varchar(60) NOT NULL
);
Result:
Query OK, 0 rows affected (0.02 sec)
Here, I simply renamed the table to Customers2
. In practice, we would probably give it a more appropriate name.
We should also be mindful that if there’s already a table with the same name as the one we’re trying to create, there’s a possibility that our desired table has already been created. In this case we wouldn’t need to recreate it (unless we had good reason). We could either just go ahead and use it, or we could alter it to suit our new requirements.
Solution 2
Another way to deal with this error is to suppress it. We can modify our CREATE TABLE
statement to only create the table if it doesn’t already exist:
CREATE TABLE IF NOT EXISTS Customers (
CustomerId int NOT NULL PRIMARY KEY,
CustomerName varchar(60) NOT NULL
);
Result:
Query OK, 0 rows affected, 1 warning (0.00 sec)
In this case, we got a warning. Let’s check the warning:
SHOW WARNINGS;
Result:
+-------+------+----------------------------------+ | Level | Code | Message | +-------+------+----------------------------------+ | Note | 1050 | Table 'Customers' already exists | +-------+------+----------------------------------+ 1 row in set (0.00 sec)
The warning explicitly tells us that the table already exists.
The Table REALLY Doesn’t Exist?
If you believe that the table really doesn’t exist, perhaps there’s something else going on. See this article on Stack Overflow for a discussion on possible solutions.
Содержание
- Database.Guide
- Beginners
- Categories
- Fix ERROR 1050 (42S01) “Table … already exists” in MySQL
- Example of Error
- Solution 1
- Solution 2
- The Table REALLY Doesn’t Exist?
- Mysql 1050 Ошибка «Таблица уже существует», хотя на самом деле это не так
- 24 ответа
- Mysql 1050 ошибка «таблица уже существует», когда на самом деле это не
- 24 ответов
Database.Guide
Beginners
Categories
- Azure SQL Edge (16)
- Database Concepts (48)
- Database Tools (70)
- DBMS (8)
- MariaDB (420)
- Microsoft Access (17)
- MongoDB (265)
- MySQL (375)
- NoSQL (7)
- Oracle (296)
- PostgreSQL (255)
- Redis (184)
- SQL (588)
- SQL Server (887)
- SQLite (235)
Fix ERROR 1050 (42S01) “Table … already exists” in MySQL
If you’re getting an error that reads something like “ERROR 1050 (42S01): Table ‘customers’ already exists” when trying to create a table in MySQL, it’s probably because there’s already a table in the database with the same name.
To fix this issue, either change the name of the table you’re trying to create, or check the existing table to see if it’s the one you actually need.
Example of Error
Here’s an example of code that produces the error:
In this case, I’m trying to create a table called Customers , but it already exists in the database.
Solution 1
The most obvious solution is to change the name of the table we’re creating:
Here, I simply renamed the table to Customers2 . In practice, we would probably give it a more appropriate name.
We should also be mindful that if there’s already a table with the same name as the one we’re trying to create, there’s a possibility that our desired table has already been created. In this case we wouldn’t need to recreate it (unless we had good reason). We could either just go ahead and use it, or we could alter it to suit our new requirements.
Solution 2
Another way to deal with this error is to suppress it. We can modify our CREATE TABLE statement to only create the table if it doesn’t already exist:
In this case, we got a warning. Let’s check the warning:
The warning explicitly tells us that the table already exists.
The Table REALLY Doesn’t Exist?
If you believe that the table really doesn’t exist, perhaps there’s something else going on. See this article on Stack Overflow for a discussion on possible solutions.
Источник
Mysql 1050 Ошибка «Таблица уже существует», хотя на самом деле это не так
Я добавляю эту таблицу:
И я получаю таблицу 1050 «уже существует»
Но таблица НЕ существует. Любые идеи?
EDIT: подробности, потому что все, кажется, не верят мне:)
1146 — Таблица ‘gunzfact_vbforumdb.contenttype’ не существует
1050 — Табл. ‘contenttype’ уже существует
24 ответа
Серьезно, теперь у вас, вероятно, есть разбитая таблица. Попробуйте:
- DROP TABLE IF EXISTS contenttype
- REPAIR TABLE contenttype
- Если у вас есть достаточные разрешения, удалите файлы данных (в/mysql/data/db_name)
из журнала MySQL:
Я получил ту же ошибку, и REPAIR TABLE (из ответа @NullUserException) не помогло.
В итоге я нашел это решение:
Для меня, без sudo , я получил следующую ошибку:
(Работает на OS X 10.6)
Вам может понадобиться очистить кеш таблицы. Например:
Встречая ту же проблему (создайте таблицу InnoDB), это то, что окончательно сработало для меня:
Я проверил файлы, разрешения, попытался выполнить REPAIR и FLUSH, но ничего не получилось.
Итак, если это вариант, переместите все рабочие таблицы в другую базу данных, отбросьте старую (вам может потребоваться вручную удалить любые файлы из папки базы данных до того, как она начнет работать), переименуйте новую, должен «вернуться на ваш путь». По-видимому, все, что «кэшируется» с помощью InnoDB, отбрасывается вместе с исходной базой данных.
Я борюсь с этим весь день: у меня есть Perl script, который строит набор таблиц, сначала делая DROP IF EXISTS . на них, а затем CREATE их. DROP преуспел, но на CREATE я получил это сообщение об ошибке: table already exists
Наконец-то я понял: новая версия MySQL, которую я использую, имеет двигатель InnoDB по умолчанию ( «show engineG;» ). Я изменил его в файле my.cnf по умолчанию на MyISAM, повторно запустил MySQL, и теперь я больше не получаю ошибку «таблица уже существует».
Аналогичная проблема возникла при создании представления. Представление было раньше, но из-за некоторых изменений, которые он удалил. Но когда я попытался добавить его снова, он показывал мне сообщение об ошибке «вид уже существует».
Решение:
Вы можете сделать одно дело вручную.
- Перейдите в папку MySQL, в которой вы ее установили.
- Перейдите в папку данных внутри нее.
- Выберите свою базу данных и зайдите в нее.
- База данных создает файлы формата .frm.
- удалить конкретный файл таблицы.
- Теперь создайте таблицу еще раз.
Он успешно создаст таблицу.
Я также столкнулся с этой проблемой, когда пытаюсь создать таблицу, в которой говорилось, что она уже существует, и сбросив таблицу, сказал, что ее не существует.
Я сделал «FLUSH TABLES», и он очистил проблему.
У меня была эта проблема на Win7 в Sql Maestro для MySql 12.3. Огромное раздражение, шоу-стоп на самом деле. Ничто не помогло, даже не отбросило и не воссоздало базу данных. У меня есть такая же настройка на XP, и она работает там, поэтому, прочитав ваши ответы о разрешениях, я понял, что это должны быть разрешения Win7. Поэтому я запускал MySql как администратор, и хотя Sql Maestro запускался нормально, ошибка исчезла. Таким образом, это может быть проблема с разрешениями между Win7 и MySql.
Я борюсь с той же проблемой. Я не могу создать таблицу, даже если она не существует. Я пробовал все вышеперечисленные решения без успеха.
Моим решением было удалить файлы ib_logfil0 , ib_logfile1 , ibdata1 и auto.cnf из папки данных MySQL; перед удалением этих файлов обязательно запустите службу MySQL.
Затем после перезапуска службы MySQL воссоздал эти файлы, и я смог запустить резервную копию script, все мои файлы CREATE были сохранены (файл sqldump).
У меня был такой же случай. Проблема заключалась в разрешении родительского каталога.
В ходе тестирования я копировал файлы из mysql и из него.
Извините, что воскрес.
У меня была такая же проблема в Mac OS X и MySQL 5.1.40. Я использовал eclipse для редактирования моего SQL script, и я попробовал MySQLWorkbench 5.2.28. Вероятно, он преобразует символы новой строки в формат Mac. Я понятия не имел, что случилось с моим script, пока я не прокомментировал первую строку в файле. После этого этот script был интерпретирован mysql как один комментарий. Для этого я использовал встроенное приложение TextEdit Mac. После того, как разрывы строк были преобразованы в правильный формат, ошибка 1050 исчезла.
Обновление для пользователей Eclipse:
Чтобы настроить окончание по умолчанию для новых файлов, созданных по всей рабочей области:
Окно → Настройки → Общие → Рабочая область → Новая строка текстового файла разделитель.
Чтобы преобразовать существующие файлы, откройте файл для редактирования и для текущего файла, перейдите в меню:
Файл → Преобразование разделителей строк в
Сначала проверьте, находитесь ли вы в правильной базе данных USE yourDB и попробуйте Select * from contenttype просто посмотреть, что это такое, и если оно действительно существует.
В моем случае проблема заключалась в том, что было представление с тем же именем, что и моя таблица, поэтому мне пришлось отбросить представление, чтобы продолжить импорт.
Автоматизированное решение, которое сработало для меня, — это заменить стандартную таблицу drop на этот sed во время дампа, чтобы также удалить любые существующие представления:
Или, если вы предпочитаете печатать в файл для резервного копирования
Или, если вы получили сбрасываемый файл и импортируете его в свой db
Вы получаете идею
Примечание: важно добавить ^ в начало замещающего регулярного выражения, потому что в дампах, которые вы не хотите касаться, есть другие типы команд DROP TABLE IF EXISTS .
У вас есть что-то вроде этого:
Чтобы иметь что-то вроде этого:
У меня возникли огромные проблемы с ошибкой 1050 и 150.
Проблема заключалась в том, что я пытался добавить ограничение с ON DELETE SET NULL в качестве одного из условий.
Переход на ON DELETE NO ACTION позволил мне добавить необходимые ограничения FK.
К сожалению, сообщения об ошибках MySql совершенно бесполезны, поэтому я должен был найти это решение итеративно и с помощью ответов на вопрос выше.
пытался импортировать резервный sql файл, но получал ошибку; 1050 «Таблица уже существует»
Моя настройка была:
- Изменен движок сервера от InnoDB до MyISAM
- Использование phpMyAdmin Удаленная база данных, которую я пытался импортировать в
- Перезапуск службы mysql
- Пробовал повторный импорт и работал
gosh, у меня была та же проблема с osCommerce install script, пока я не выяснил, что система mysql имеет много баз данных, а запрос create table сам копирует в каждый из них и, таким образом, отбрасывает только рабочую таблицу на активном db didnt help, мне пришлось отказаться от таблицы из всех dbs
Для меня проблема возникла при использовании копии файловой системы базы данных mysql вместо mysqldump. У меня есть очень большие таблицы, в основном MyISAM и несколько таблиц кэша InnoDB, и это не является практичным для mysqldump данных. Поскольку мы все еще запускаем MyISAM, XtraBackup не является вариантом.
Те же симптомы, что и выше, произошли со мной. Таблицы там нет, в каталоге нет файлов, относящихся к таблице, но это невозможно создать, потому что MySQL думает о ней. Капля таблицы говорит, что нет, создание таблицы говорит, что это так.
Проблема возникла на двух машинах, оба были исправлены путем копирования резервных копий. Тем не менее, я заметил, что в моей резервной копии был файл .MYD и .MYI, хотя у меня создалось впечатление, что эти файлы не используются для InnoDB. У файлов .MYD и .MYI был владелец root, а .frm принадлежал mysql.
Если вы копируете из резервной копии, проверьте права доступа к файлу. Таблицы Flush могут работать, но я решил закрыть и перезапустить базу данных.
Мой оператор CREATE был частью промежуточного сценария env.
Я попробовал все, что было упомянуто выше. Я НЕ получил решение. Однако мой путь к искуплению:
Я натыкаюсь на то, что (один из многих в) оператор CREATE прошел, когда я исправил чувствительность к регистру базы данных. Это что-то нажало. Я повторил то же самое для других таблиц.
Однако на сцену появилась новая ошибка. Прямые цитаты для «комментариев» бросали синтаксическую ошибку. Я был потрясен. заменили их, но появилась новая ошибка. Наконец я знал решение.
РЕШЕНИЕ: Дамп, который я использовал, возможно, был из другой версии MySql. Я получил разрешение на подключение к промежуточной MYsql с помощью локальной (установленной на моей машине) рабочей среды mysql. Я не rdp на промежуточном сервере для входа в очередь для работы с mysql workbench. Создал дамп оттуда. Отказался от дампа, и он работал как сладкий.
Источник
Mysql 1050 ошибка «таблица уже существует», когда на самом деле это не
я добавляю эту таблицу:
и я получаю 1050 «таблица уже существует»
но таблицы не существует. Есть идеи?
EDIT: подробнее, потому что все, кажется, не верят мне:)
1146 — таблица ‘gunzfact_vbforumdb.contenttype ‘ не существует
1050-таблица ‘contenttype’ уже существует
24 ответов
серьезно, у вас, вероятно, сломанный стол. Попробуйте:
- DROP TABLE IF EXISTS contenttype
- REPAIR TABLE contenttype
- если у вас есть достаточные разрешения, удалите файлы данных (в /mysql/data/db_name)
из журнала MySQL:
я получил эту же ошибку, и таблица восстановления (из ответа @NullUserException) не помогла.
В конце концов я нашел данное решение:
для меня, без sudo , Я получил следующую ошибку:
(работает на OS X 10.6)
возможно, потребуется очистить кэш таблицы. Например:
я боролся с этим весь день: у меня есть скрипт на Perl, который создает набор таблиц, выполнив DROP IF EXISTS . и CREATE ing их. The DROP удалось, но на CREATE Я получил это сообщение об ошибке: table already exists
я, наконец, добрался до сути: новая версия MySQL, которую я использую, имеет движок по умолчанию InnoDB («show engine G;»), я изменил его в my.cnf файл по умолчанию MyISAM, перезапустил MySQL, и теперь я больше не получаю » таблицу уже существует ошибка».
столкнувшись с той же проблемой (создайте таблицу InnoDB), это то, что наконец сработало для меня:
Я проверил на основе файла, разрешения, попытался восстановить и смыть, но ничего не получилось.
поэтому, если это опция, переместите все рабочие таблицы в другую базу данных, отбросьте старую (возможно, вам придется вручную удалить любые файлы из папки базы данных перед падением на работу) переименуйте новый, и вы должны быть на вашем пути. По-видимому, все, что «кэшируется» с помощью InnoDB, удаляется вместе с исходной базой данных.
У меня была эта проблема на Win7 в Sql Maestro для MySql 12.3. Ужасно раздражает, на самом деле, остановка шоу. Ничто не помогало, даже удаление и воссоздание базы данных. У меня такая же настройка на XP, и она работает там, поэтому после прочтения ваших ответов о разрешениях я понял, что это должны быть разрешения Win7. Поэтому я запустил MySql как администратор, и хотя Sql Maestro был запущен нормально, ошибка исчезла. Таким образом, это должно было быть проблемой разрешений между Win7 и Для MySQL.
Я также столкнулся с этой проблемой, когда при попытке создать таблицу сказал, что она уже существует и отбрасывая таблицу сказал, что она не существует.
Я сделал «флеш-таблицы», и это очистило проблему.
такая же проблема возникла со мной при создании представления. Представление присутствовало ранее из-за некоторых изменений, которые он удалил, но когда я попытался добавить его снова, он показывал мне сообщение об ошибке «view already exists».
решение:
вы можете сделать одну вещь вручную.
- перейдите в папку MySQL, где вы установили его
- перейдите в папку данных внутри него.
- выберите базу данных и зайдите внутрь он.
- базы данных создает «.frm » формат файлов.
- удалить файл конкретной таблицы.
- Теперь создайте таблицу снова.
Он успешно создаст таблицу.
сначала проверьте, находитесь ли вы в правильной базе данных 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 и из mysql во время тестирования.
было недостаточно, нужно было:
извините за воскрешение.
Я борюсь с той же проблемой. Я не могу создать таблицу, даже если она не существует. Я пробовал все вышеперечисленные решения без успеха.
моим решением было удалить файлы ib_logfil0 , ib_logfile1 , ibdata1 и auto.cnf из папки данных MySQL; убедитесь, что сначала остановите службу MySQL перед удалением этих файлов.
затем после перезапуска службы MySQL воссоздал эти файлы, и я смог запустить сценарий резервного копирования, все мои CREATE s были хранится (файл sqldump).
у меня была такая же проблема, и похоже, что имя базы данных было чувствительным к регистру. Моя база данных называется:
в то время как мой скрипт входит
Как только я изменил имя базы данных на правильный случай, все это, казалось, работало. Использование MySQL Workbench на MAC OSX
эта проблема также возникает, если «представление» (воображаемая таблица) существует в базе данных с тем же именем, что и наше новое имя таблицы.
в моем случае я обнаружил, что это проблема с InnoDB; я никогда не обнаружил, в чем заключалась фактическая проблема, но создание как MyISAM позволило ему построить
вы не верите мне!! Ive просто удалите блок комментариев из моего .sql-файл и теперь все работает.
удаленный блок комментариев был такой:
Я оставил только проблемный стол в одном .sql-файл. После этого я удалил комментарии, остался только код, и ошибка пропадает.
для меня проблема была вызвана при использовании копии файловой системы каталога базы данных mysql вместо mysqldump. У меня есть очень большие таблицы, в основном MyISAM и несколько таблиц кэша InnoDB, и это не практично mysqldump данные. Поскольку мы все еще запускаем MyISAM, XtraBackup не является вариантом.
те же симптомы, что и выше произошло со мной. Таблицы нет, в каталоге нет файлов, относящихся к таблице, но она не может быть создана, потому что MySQL думает его там. Drop table говорит, что его нет, create table говорит, что он есть.
проблема возникла на двух машинах, обе были исправлены путем копирования резервных копий. Тем не менее, я заметил, что в моей резервной копии есть .MYD and .MYI файл, хотя я был под впечатлением, что эти файлы не используются для InnoDB. Этот.MYD and .Файлы MYI имели владельца root, в то время как.frm принадлежал mysql.
Если вы копируете из резервной копии, проверьте права доступа к файлам. Таблицы Flush могут работа, но я решил закрыть и перезапустить базу данных.
боже, у меня была такая же проблема с osCommerce установить скрипт, пока я не выяснил, что система mysql имеет много баз данных и create table запрос копирует себя в каждый и, таким образом, удаление только рабочей таблицы на активной БД не помогло, мне пришлось удалить таблицу из всех dbs
мой оператор CREATE был частью промежуточного дампа env.
Я попробовал все, что было сказано выше. Я не получил решения. Однако мой путь к искуплению был:
я натыкаюсь на тот факт, что (один из многих) оператор CREATE прошел, когда я исправил чувствительность к регистру имени базы данных. Что-то щелкнуло. Я повторил то же самое для других столов.
однако на сцену вышла новая ошибка. Прямые кавычки для «комментариев» бросали синтаксическую ошибку. Я был потрясен. заменил их, но новая ошибка начала появляться. Наконец-то я нашел решение.
решение: дамп, который я использовал, мог быть из другой версии MySql. Я получил разрешение подключиться к промежуточному MYsql, используя локальный (установленный на моей машине) MySQL workbench. Я не rdp в промежуточный сервер для входа в промежуточный MySQL workbench. Создал дамп оттуда. Побежал на свалку и это сработало как конфета.
пытался импортировать резервный файл sql, но получал ошибку; 1050 «таблица уже существует»
моя установка была такой:
- изменен движок сервера с InnoDB на MyISAM
- используя phpMyAdmin удалил базу данных, которую я пытался импортировать в
- перезапустил службу mysql
- попробовал реимпорт и он работал
у меня были огромные проблемы с ошибкой 1050 и 150.
проблема для меня заключалась в том, что я пытался добавить ограничение с ON DELETE SET NULL как одно из условий.
изменение ON DELETE NO ACTION позволил мне добавить необходимые ограничения FK.
к сожалению, сообщения об ошибках MySql совершенно бесполезны, поэтому мне пришлось найти это решение итеративно и с помощью ответов на вопрос выше.
в моем случае проблема заключалась в том, что было представление с тем же именем, что и моя таблица, поэтому мне пришлось удалить представление, чтобы позволить импорту продолжаться.
автоматическое решение, которое сработало для меня, — заменить обычную таблицу drop на этот sed во время дампа, чтобы также удалить любые представления, которые могут существовать:
или если вы предпочитаете печатать в файл для резервного копирования
или если вы получили сбросил файл и импортируете его в свой db
Примечание: важно, чтобы вы добавить ^ в начале регулярного выражения замены, потому что есть другие типы DROP TABLE IF EXISTS команды в дампах, которые вы не хотите трогать.
Источник
я добавляю эту таблицу:
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 — таблица ‘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’ уже существует
24 ответов
звучит как Шредингера таблице…
серьезно, у вас, вероятно, сломанный стол. Попробуйте:
DROP TABLE IF EXISTS contenttype
REPAIR TABLE contenttype
- если у вас есть достаточные разрешения, удалите файлы данных (в /mysql/data/db_name)
59
автор: NullUserException
из журнала 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
для меня, без sudo
, Я получил следующую ошибку:
mysqladmin: refresh failed; error: 'Access denied; you need the RELOAD privilege for this operation'
(работает на OS 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
ing их. The DROP
удалось, но на CREATE
Я получил это сообщение об ошибке: table already exists
я, наконец, добрался до сути: новая версия MySQL, которую я использую, имеет движок по умолчанию InnoDB («show engine G;»), я изменил его в my.cnf файл по умолчанию MyISAM, перезапустил MySQL, и теперь я больше не получаю » таблицу уже существует ошибка».
столкнувшись с той же проблемой (создайте таблицу InnoDB), это то, что наконец сработало для меня:
DROP DATABASE `having_issues`;
Я проверил на основе файла, разрешения, попытался восстановить и смыть, но ничего не получилось.
поэтому, если это опция, переместите все рабочие таблицы в другую базу данных, отбросьте старую (возможно, вам придется вручную удалить любые файлы из папки базы данных перед падением на работу) переименуйте новый, и вы должны быть на вашем пути. По-видимому, все, что «кэшируется» с помощью InnoDB, удаляется вместе с исходной базой данных.
У меня была эта проблема на Win7 в Sql Maestro для MySql 12.3. Ужасно раздражает, на самом деле, остановка шоу. Ничто не помогало, даже удаление и воссоздание базы данных. У меня такая же настройка на XP, и она работает там, поэтому после прочтения ваших ответов о разрешениях я понял, что это должны быть разрешения Win7. Поэтому я запустил MySql как администратор, и хотя Sql Maestro был запущен нормально, ошибка исчезла. Таким образом, это должно было быть проблемой разрешений между Win7 и Для MySQL.
Я также столкнулся с этой проблемой, когда при попытке создать таблицу сказал, что она уже существует и отбрасывая таблицу сказал, что она не существует.
Я сделал «флеш-таблицы», и это очистило проблему.
такая же проблема возникла со мной при создании представления.
Представление присутствовало ранее из-за некоторых изменений, которые он удалил, но когда я попытался добавить его снова, он показывал мне сообщение об ошибке «view already exists».
решение:
вы можете сделать одну вещь вручную.
- перейдите в папку MySQL, где вы установили его
- перейдите в папку данных внутри него.
- выберите базу данных и зайдите внутрь он.
- базы данных создает «.frm » формат файлов.
- удалить файл конкретной таблицы.
- Теперь создайте таблицу снова.
Он успешно создаст таблицу.
сначала проверьте, находитесь ли вы в правильной базе данных 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 и из mysql во время тестирования.
drwx------ 3 _mysql wheel
было недостаточно, нужно было:
-rw-rw---- 3 _mysql wheel
извините за воскрешение.
Я борюсь с той же проблемой. Я не могу создать таблицу, даже если она не существует. Я пробовал все вышеперечисленные решения без успеха.
моим решением было удалить файлы ib_logfil0
, ib_logfile1
, ibdata1
и auto.cnf
из папки данных MySQL; убедитесь, что сначала остановите службу MySQL перед удалением этих файлов.
затем после перезапуска службы MySQL воссоздал эти файлы, и я смог запустить сценарий резервного копирования, все мои CREATE
s были хранится (файл sqldump).
у меня была такая же проблема, и похоже, что имя базы данных было чувствительным к регистру. Моя база данных называется:
Mydatabase
в то время как мой скрипт входит
USE mydatabase
Как только я изменил имя базы данных на правильный случай, все это, казалось, работало. Использование MySQL Workbench на MAC OSX
эта проблема также возникает, если «представление» (воображаемая таблица) существует в базе данных с тем же именем, что и наше новое имя таблицы.
в моем случае я обнаружил, что это проблема с InnoDB; я никогда не обнаружил, в чем заключалась фактическая проблема, но создание как MyISAM позволило ему построить
вы не верите мне!! Ive просто удалите блок комментариев из моего .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-файл. После этого я удалил комментарии, остался только код, и ошибка пропадает.
для меня проблема была вызвана при использовании копии файловой системы каталога базы данных mysql вместо mysqldump. У меня есть очень большие таблицы, в основном MyISAM и несколько таблиц кэша InnoDB, и это не практично mysqldump данные. Поскольку мы все еще запускаем MyISAM, XtraBackup не является вариантом.
те же симптомы, что и выше произошло со мной. Таблицы нет, в каталоге нет файлов, относящихся к таблице, но она не может быть создана, потому что MySQL думает его там. Drop table говорит, что его нет, create table говорит, что он есть.
проблема возникла на двух машинах, обе были исправлены путем копирования резервных копий. Тем не менее, я заметил, что в моей резервной копии есть .MYD and .MYI файл, хотя я был под впечатлением, что эти файлы не используются для InnoDB. Этот.MYD and .Файлы MYI имели владельца root, в то время как.frm принадлежал mysql.
Если вы копируете из резервной копии, проверьте права доступа к файлам. Таблицы Flush могут работа, но я решил закрыть и перезапустить базу данных.
удачи.
боже, у меня была такая же проблема с osCommerce
установить скрипт, пока я не выяснил, что система mysql имеет много баз данных и create table
запрос копирует себя в каждый и, таким образом, удаление только рабочей таблицы на активной БД не помогло, мне пришлось удалить таблицу из всех dbs
мой оператор CREATE был частью промежуточного дампа env.
Я попробовал все, что было сказано выше. Я не получил решения. Однако мой путь к искуплению был:
-
я натыкаюсь на тот факт, что (один из многих) оператор CREATE прошел, когда я исправил чувствительность к регистру имени базы данных. Что-то щелкнуло. Я повторил то же самое для других столов.
-
однако на сцену вышла новая ошибка. Прямые кавычки для «комментариев» бросали синтаксическую ошибку. Я был потрясен. заменил их, но новая ошибка начала появляться. Наконец-то я нашел решение.
решение: дамп, который я использовал, мог быть из другой версии MySql. Я получил разрешение подключиться к промежуточному MYsql, используя локальный (установленный на моей машине) MySQL workbench. Я не rdp в промежуточный сервер для входа в промежуточный MySQL workbench. Создал дамп оттуда. Побежал на свалку и это сработало как конфета.
пытался импортировать резервный файл sql, но получал ошибку; 1050 «таблица уже существует»
моя установка была такой:
- Windows 7
- Mysql 5.5.16
устранение:
- изменен движок сервера с InnoDB на MyISAM
- используя phpMyAdmin удалил базу данных, которую я пытался импортировать в
- перезапустил службу mysql
- попробовал реимпорт и он работал
у меня были огромные проблемы с ошибкой 1050 и 150.
проблема для меня заключалась в том, что я пытался добавить ограничение с ON DELETE SET NULL
как одно из условий.
изменение ON DELETE NO ACTION
позволил мне добавить необходимые ограничения FK.
к сожалению, сообщения об ошибках MySql совершенно бесполезны, поэтому мне пришлось найти это решение итеративно и с помощью ответов на вопрос выше.
в моем случае проблема заключалась в том, что было представление с тем же именем, что и моя таблица, поэтому мне пришлось удалить представление, чтобы позволить импорту продолжаться.
drop view `my-view-that-has-same-name-as-table`;
автоматическое решение, которое сработало для меня, — заменить обычную таблицу drop на этот sed во время дампа, чтобы также удалить любые представления, которые могут существовать:
mysqldump my-db
| sed -E 's/^DROP TABLE IF EXISTS(.+)$/ DROP VIEW IF EXISTS/g'
| mysql my-other-db
или если вы предпочитаете печатать в файл для резервного копирования
mysqldump my-db
| sed -E 's/^DROP TABLE IF EXISTS(.+)$/ DROP VIEW IF EXISTS/g'
> my-db.dump.sql
или если вы получили сбросил файл и импортируете его в свой db
cat my-db.dump.sql
| sed -E 's/^DROP TABLE IF EXISTS(.+)$/ DROP VIEW IF EXISTS/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` (
...
ваш диск также может быть просто заполнен. (только что)
Я добавляю эту таблицу:
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 — Таблица ‘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’ уже существует
Seriously now, you probably have a broken table. Try:
DROP TABLE IF EXISTS contenttype
REPAIR TABLE contenttype
- If you have sufficient permissions, delete the data files (in /mysql/data/db_name)
I got this same error, and REPAIR TABLE (from @NullUserException’s answer) didn’t help.
sudo mysqladmin flush-tables
For me, without the sudo
, I got the following error:
mysqladmin: refresh failed; error: 'Access denied; you need the RELOAD privilege for this operation'
(Running on OS X 10.6)
I’ve been fighting with this all day: I have a Perl script that builds a set of tables by first doing a DROP IF EXISTS ...
on them and then CREATE
ing them. The DROP
succeeded, but on CREATE
I got this error message: table already exists
I finally got to the bottom of it: The new version of MySQL that I’m using has a default engine of InnoDB («show engine G;») I changed it in the my.cnf file to default to MyISAM, re-started MySQL, and now I no longer get the «table already exists» error.
I had this problem on Win7 in Sql Maestro for MySql 12.3. Enormously irritating, a show stopper in fact. Nothing helped, not even dropping and recreating the database. I have this same setup on XP and it works there, so after reading your answers about permissions I realized that it must be Win7 permissions related. So I ran MySql as administrator and even though Sql Maestro was run normally, the error disappeared. So it must have been a permissions issue between Win7 and MySql.
Same problem occurred with me while creating a view. The view was present earlier then due to some changes it got removed But when I tried to add it again it was showing me «view already exists» error message.
Solution:
You can do one thing manually.
- Go to the MySQL folder where you have installed it
- Go to the data folder inside it.
- Choose your database and go inside it.
- Data base creates «.frm» format files.
- delete the particular table’s file.
- Now create the table again.
It will create the table successfully.
I had the same problem at Mac OS X and MySQL 5.1.40. I used eclipse to edit my SQL script and than I tried MySQLWorkbench 5.2.28. Probably it converted newline characters to Mac format. I had no idea about what’s wrong with my script until I commented out the first line in file. After this this script was interpreted by mysql as a one single comment. I used build-in TextEdit Mac application to fix this. After line-breaks was converted to the correct format, the error 1050 gone.
Update for Eclipse users:
To set up default ending for new files created, across the entire workspace:
Window -> Preferences -> General -> Workspace -> New text file line delimiter.
To convert existing files, open file for editing and for the currently edited file, go to the menu:
File -> Convert Line Delimiters To
I am struggling with the same issue. I cannot create a table, even though it does not exist. I tried all the above solutions with no success.
My solution was to delete the files ib_logfil0
, ib_logfile1
, ibdata1
, and auto.cnf
from the data folder of MySQL; make sure to stop the MySQL service first before deleting these files.
Then after restarting the service, MySQL recreated these files and I was able to run a backup script were all my CREATE
s were stored (a sqldump file).
This problem also occurs if a ‘view’ (imaginary table) exists in database as same name as our new table name.
You won´t believe me!! I´ve just remove 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, only code was left, and the error dissapears.
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
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:
- Changed the server engine from InnoDB to MyISAM
- Using phpMyAdmin Deleted the database I was trying to import to
- Restarted the mysql service
- Tried the re-importation and it worked
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(.+)$/ DROP VIEW IF EXISTS1/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(.+)$/ DROP VIEW IF EXISTS1/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(.+)$/ DROP VIEW IF EXISTS1/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` (
...