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 - таблица '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)
из журнала 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 их. Элемент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 и из него во время тестирования.
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 позволило ему построить
Вы мне не поверите!! Я просто удаляю блок комментариев из моего .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 думает, что он там. Падение таблица говорит, что это не существует, создайте таблицу, - говорит он.
проблема возникла на двух машинах, обе были исправлены путем копирования резервных копий. Однако, я заметил, что в моей резервной копии, которая была .MYD, и .MYI файл, хотя я был под впечатлением, что эти файлы не используются для InnoDB. Этот.MYD, и .У файлов MYI был владелец root, в то время как.frm принадлежал mysql.
Если вы копируете из резервной копии, проверьте права доступа к файлам. Флеш-таблицы могут работа, но я решил закрыть и перезапустить базу данных.
удачи.
боже, у меня была такая же проблема с
osCommerce
установить скрипт, пока я не понял, что система mysql имеет много баз данных иcreate table
запрос копирует себя в каждый из них и, таким образом, удаление только рабочей таблицы на активной БД не помогло, мне пришлось удалить таблицу из всех БД
мой создать заявление было сделано на промежуточную свалку ОКР.
Я попробовал все, что было сказано выше. Я не получил решение. Однако мой путь к искуплению был:
я натыкаюсь на тот факт, что (один из многих) оператор 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.
в моем случае проблема заключалась в том, что было представление с тем же именем, что и моя таблица, поэтому мне пришлось удалить представление, чтобы продолжить импорт.
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` ( ...