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 "테이블이 이미 존재합니다"를 얻습니다.
그러나 테이블이 존재하지 않습니다. 어떤 아이디어?
편집 : 모두가 나를 믿지 않는 것 같기 때문에 더 많은 세부 사항 :)
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'테이블이 이미 있습니다.
슈뢰딩거의 테이블 이있는 것 같은데 ...
진지하게 지금 당신은 아마도 깨진 테이블을 가지고있을 것입니다. 시험:
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.
이 같은 오류가 발생했고 REPAIR TABLE (@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` ...
저는 하루 종일 이것으로 싸우고 있습니다. 먼저 테이블에 대해 작업을 수행 한 DROP IF EXISTS ...
다음 테이블 세트를 작성하는 Perl 스크립트가 CREATE
있습니다. 는 DROP
성공했지만에 CREATE
나는이 오류 메시지를 받았습니다 :table already exists
마지막으로 결론을 내 렸습니다. 제가 사용하고있는 MySQL의 새 버전에는 InnoDB ( "show engine \ G;")의 기본 엔진이 있습니다. my.cnf 파일에서 기본값을 MyISAM으로 변경했습니다. MySQL을 시작했고 이제 더 이상 "테이블이 이미 존재합니다"라는 오류가 발생하지 않습니다.
같은 문제가 발생하면 (InnoDB 테이블 생성) 이것이 마침내 나를 위해 일한 것입니다.
DROP DATABASE `having_issues`;
파일 기반, 권한을 확인하고 REPAIR 및 FLUSH를 시도했지만 아무것도 작동하지 않았습니다.
따라서 이것이 옵션 인 경우 모든 작업 테이블을 다른 DATABASE로 이동하고 이전 테이블을 삭제하고 (드롭하기 전에 데이터베이스 폴더에서 모든 파일을 수동으로 제거해야 할 수 있음) 새 테이블의 이름을 변경하고 돌아 오세요. 분명히 InnoDB를 사용하여 '캐시'되는 모든 것은 원본 데이터베이스와 함께 삭제됩니다.
MySql 12.3 용 Sql Maestro의 Win7에서이 문제가 발생했습니다. 사실 엄청나게 자극적이며 쇼 스토퍼입니다. 데이터베이스를 삭제하고 다시 생성하는 것도 도움이되지 않았습니다. 나는 XP에서 이와 동일한 설정을 가지고 있으며 거기에서 작동하므로 권한에 대한 답변을 읽은 후 Win7 권한과 관련이 있어야 함을 깨달았습니다. 그래서 관리자 권한으로 MySql을 실행했고 Sql Maestro가 정상적으로 실행 되었음에도 불구하고 오류가 사라졌습니다. 따라서 Win7과 MySql 사이의 권한 문제 였을 것입니다.
나는 또한 테이블을 만들려고 시도하면 이미 존재한다고 말하고 테이블을 삭제하면 존재하지 않는다고 말한이 문제가 발생했습니다.
나는 "FLUSH TABLES"를했고 그것은 문제를 해결했다.
뷰를 만드는 동안 동일한 문제가 발생했습니다. 보기는 이전에 일부 변경 사항으로 인해 제거되었지만 다시 추가하려고 할 때 "보기가 이미 있습니다"라는 오류 메시지가 표시되었습니다.
해결책 :
한 가지를 수동으로 수행 할 수 있습니다.
- 설치 한 MySQL 폴더로 이동하십시오.
- 그 안의 데이터 폴더로 이동하십시오.
- 데이터베이스를 선택하고 그 안으로 들어가십시오.
- 데이터베이스는 ".frm"형식 파일을 생성합니다.
- 특정 테이블의 파일을 삭제하십시오.
- 이제 테이블을 다시 만듭니다.
테이블이 성공적으로 생성됩니다.
당신이 바로 데이터베이스에있는 경우 먼저 확인 USE yourDB
하고 시도 Select * from contenttype
무엇이며 정말 존재하는지 그냥 ...
Mac OS X 및 MySQL 5.1.40에서 동일한 문제가 발생했습니다. 이클립스를 사용하여 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 오류 메시지는 전혀 도움이되지 않으므로 위의 질문에 대한 답변을 통해이 솔루션을 반복적으로 찾아야했습니다.
나는 같은 문제로 어려움을 겪고 있습니다. 테이블이 없어도 만들 수 없습니다. 위의 모든 솔루션을 성공하지 못했습니다.
내 솔루션 삭제했던 파일 ib_logfil0
, ib_logfile1
, ibdata1
,와 auto.cnf
의 MySQL 데이터 폴더에서; 이러한 파일을 삭제하기 전에 먼저 MySQL 서비스를 중지해야합니다.
그런 다음 서비스를 다시 시작한 후 MySQL이 이러한 파일을 다시 생성하고 모든 CREATE
파일이 저장된 백업 스크립트 (sqldump 파일) 를 실행할 수있었습니다 .
나는 이와 같은 문제가 있었고 데이터베이스 이름이 대소 문자를 구분하는 것 같습니다. 내 데이터베이스는 다음과 같습니다.
Mydatabase
내 스크립트가 포함되어있는 동안
USE mydatabase
데이터베이스 이름을 올바른 대소 문자로 변경하면 모두 작동하는 것처럼 보였습니다. MAC OSX에서 MYSQL Workbench 사용
이 문제는 '뷰'(가상 테이블)가 새 테이블 이름과 동일한 이름으로 데이터베이스에 존재하는 경우에도 발생합니다.
제 경우에는 이것이 InnoDB의 문제라는 것을 알았습니다. 나는 실제 문제가 무엇인지 결코 발견하지 못했지만 MyISAM으로 만들면
나에게 문제는 mysqldump 대신 mysql 데이터베이스 디렉토리의 파일 시스템 복사본을 사용할 때 발생했습니다. 나는 매우 큰 테이블, 대부분 MyISAM 및 몇 개의 InnoDB 캐시 테이블을 가지고 있으며 데이터를 mysqldump하는 것은 실용적이지 않습니다. 아직 MyISAM을 실행하고 있기 때문에 XtraBackup은 옵션이 아닙니다.
위와 같은 증상이 나에게 일어났습니다. 테이블이 존재하지 않고 테이블과 관련된 디렉토리에 파일이 없지만 MySQL이 거기에 있다고 생각하기 때문에 생성 할 수 없습니다. Drop table은 거기에 없다고 말하고 create table은 있다고 말합니다.
두 컴퓨터에서 문제가 발생했으며 둘 다 백업을 복사하여 해결되었습니다. 그러나 백업에서 .MYD 및 .MYI 파일이 있음을 알았습니다. 이러한 파일이 InnoDB에 사용되지 않는다는 인상을 받았음에도 불구하고. .MYD 및 .MYI 파일의 소유자는 root이고 .frm은 mysql이 소유했습니다.
백업에서 복사하는 경우 파일 권한을 확인하십시오. 플러시 테이블이 작동 할 수도 있지만 데이터베이스를 종료하고 다시 시작하도록 선택했습니다.
행운을 빕니다.
어머, 나는 osCommerce
mysql 시스템에 많은 데이터베이스가 있고 create table
쿼리가 각 데이터베이스에 자체 복사되어 활성 db의 작업 테이블 만 삭제하는 것이 도움이되지 않았 음을 알 때까지 설치 스크립트 와 동일한 문제가있었습니다. 모든 db에서 테이블을 삭제해야했습니다.
내 CREATE 문은 준비 환경 덤프의 일부였습니다.
I did try everything that has been mentioned above. I DID NOT get solution. However my path to redemption was:
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.
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:
- 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
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.
'program tip' 카테고리의 다른 글
jquery에! important를 포함하는 방법 (0) | 2020.11.07 |
---|---|
ResultSet 예외-결과 세트 시작 전 (0) | 2020.11.07 |
PHP로 계산 된 CRAP 인덱스를 읽고 개선하는 방법 (0) | 2020.11.07 |
"공유 객체를 만들 때`.rodata.str1.8 '에 대한 재배치 R_X86_64_32는 사용할 수 없습니다."로 컴파일 실패 (0) | 2020.11.07 |
getchar ()로 Enter 키를 누르지 않는 방법 (0) | 2020.11.07 |