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 - 'content type' 테이블이 이미 있습니다.
슈로딩거의 책상이 있는 것 같은데...
정말이지, 넌 아마 깨진 탁자를 가지고 있을 거야.시험:
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.
테이블 캐시를 플러시해야 할 수 있습니다.예를 들어 다음과 같습니다.
DROP TABLE IF EXISTS `tablename` ;
FLUSH TABLES `tablename` ; /* or exclude `tablename` to flush all tables */
CREATE TABLE `tablename` ...
같은 에러가 발생했는데 (@NullUserException의 답변에 있는) 복구 테이블은 도움이 되지 않았습니다.
저는 결국 이 해결책을 찾았습니다.
sudo mysqladmin flush-tables
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ sudo
, 음 ,::: ,: , , , , , , 。
mysqladmin: refresh failed; error: 'Access denied; you need the RELOAD privilege for this operation'
(OS X 10.6에서 실행)
뷰를 작성할 때도 같은 문제가 발생하였습니다.뷰는 이전에 몇 가지 변경으로 인해 삭제되었지만 다시 추가하려고 하면 "view are exists" 오류 메시지가 나타납니다.
솔루션:
한 가지 작업을 수동으로 수행할 수 있습니다.
- 설치한 MySQL 폴더로 이동합니다.
- 그 안에 있는 데이터 폴더로 이동합니다.
- 데이터베이스를 선택하고 안으로 들어갑니다.
- 데이터베이스는 ".frm" 형식의 파일을 만듭니다.
- 특정 테이블의 파일을 삭제합니다.
- 이제 테이블을 다시 만듭니다.
테이블이 정상적으로 생성됩니다.
MySql 12.3용 SQL Maestro의 Win7에서 이 문제가 발생했습니다.엄청나게 짜증나죠, 사실 쇼 스토퍼죠.아무것도 도움이 되지 않았고, 심지어 데이터베이스를 삭제하고 다시 만들지도 않았습니다.XP에서도 같은 셋업을 하고 있기 때문에 권한에 대한 답변을 읽고 Win7 권한에 관련된 것이 틀림없다는 것을 알았습니다.그래서 관리자로 MySql을 실행했는데 Sql Maestro가 정상적으로 실행되어도 오류가 사라졌습니다.Win7과 MySql 간의 권한 문제였을 것입니다.
종일 .Perl 스크립트를 사용하면 Perl을 실행하여 할 수 있습니다.Perl 스크립트는 처음에 다음 작업을 수행하여 테이블 세트를 구축합니다.DROP IF EXISTS ...
CREATE
★★★★★★★★★★★★★★★★★★★★★.DROP
on공 succeeded succeeded succeeded succeeded succeeded CREATE
메세지가.table already exists
마침내 진상을 밝혀냈어사용하고 있는 MySQL의 새로운 버전은 InnoDB('show engine \G;')의 디폴트엔진을 탑재하고 있습니다.my.cnf 파일에서 MyISAM으로 변경하고 MySQL을 재기동하면 "table exists" 오류가 발생하지 않습니다.
같은 문제(InnoDB 테이블 생성)에 직면했을 때, 저는 결국 이렇게 되었습니다.
DROP DATABASE `having_issues`;
파일 기반, 권한, 복구 및 플러시를 시도했지만 아무 것도 작동하지 않았습니다.
따라서 모든 작업 테이블을 다른 데이터베이스로 이동하고 이전 작업 테이블을 삭제한 후(드롭이 작동하기 전에 데이터베이스 폴더에서 파일을 수동으로 삭제해야 할 수도 있음), 새 작업 테이블의 이름을 바꾸면 '돌아가야' 합니다.InnoDB를 사용하여 '캐시'되는 것은 원래 데이터베이스와 함께 폐기됩니다.
날 믿지 못할 거야!방금 .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 파일에 남겨두었습니다.그 후 코멘트를 삭제하면 코드만 남아 에러가 사라집니다.
테이블을 작성하려고 하면 이미 존재한다고 하고 테이블을 삭제하면 존재하지 않는다고 하는 이 문제도 발생했습니다.
'FLUSH TABles'를 했더니 문제가 해결됐어요.
저는 같은 문제로 고민하고 있습니다.테이블이 존재하지 않아도 만들 수 없습니다.나는 위의 모든 해결책을 시도해 보았지만 성공하지 못했다.
은 파일들을 이었다.ib_logfil0
,ib_logfile1
,ibdata1
, , , , 입니다.auto.cnf
MySQL의 데이터 폴더에서 파일을 삭제하기 전에 먼저 MySQL 서비스를 중지해야 합니다.
후 MySQL이 작성했고, 할 수 것은 MySQL이다.CREATE
는 저장되었습니다(sqldump 파일).
올바른 합니다.USE yourDB
해 보다Select * from contenttype
그게 뭔지, 그리고 그게 정말 존재하는지 보기 위해서...
Mac OS X와 MySQL 5.1.40에서도 같은 문제가 있었습니다.SQL 스크립트를 편집하기 위해 이클립스를 사용하고 MySQLWorkbench 5.2.28을 시도했습니다. 아마도 줄바꿈 문자를 Mac 형식으로 변환했을 것입니다.파일의 첫 줄을 코멘트하기 전까지는 내 스크립트의 문제가 무엇인지 전혀 몰랐다.이후 mysql에 의해 이 스크립트는 단일 코멘트로 해석되었습니다.이 문제를 해결하기 위해 내장 TextEditMac 애플리케이션을 사용했습니다.줄 바꿈이 올바른 형식으로 변환된 후 오류 1050이 사라졌습니다.
Eclipse 사용자 업데이트:
전체 작업 공간에서 생성된 새 파일에 대한 기본 엔딩을 설정하려면:
창 -> 설정 -> 일반 -> 작업영역 -> 새 텍스트 파일 행 구분 기호.
기존 파일을 변환하려면 편집하기 위해 파일을 열고 현재 편집 중인 파일의 경우 다음 메뉴로 이동합니다.
파일 -> 행 구분 기호 변환
나도 같은 케이스가 있었어문제는 결국 상위 디렉토리에 대한 권한입니다.
저는 테스트 중에 mysql에 파일을 복사하고 있었습니다.
drwx------ 3 _mysql wheel
충분치 않아 필요:
-rw-rw---- 3 _mysql wheel
부활해서 미안해.
Error 1050과 150에 큰 문제가 있었습니다.
제가 가 된 거죠.ON DELETE SET NULL
조건 중 하나로요.
「 」로 ON DELETE NO ACTION
FKK는 FK를 사용하다
안타깝게도 MySql 오류 메시지는 전혀 도움이 되지 않기 때문에 위의 질문에 대한 답변으로 반복적으로 이 솔루션을 찾아야 했습니다.
디스크가 꽉 찼을 수도 있습니다.(그냥)
같은 문제가 발생했는데 데이터베이스 이름에서 대소문자가 구분된 것 같습니다.내 데이터베이스 이름:
Mydatabase
내 대본에 포함된 반면
USE mydatabase
데이터베이스 이름을 올바른 대소문자로 바꾸자 모든 것이 작동하는 것처럼 보였습니다.MAC OSX에서의 MYSQL Workbench 사용
이 문제는 데이터베이스에 새로운 테이블 이름과 동일한 이름인 '뷰'(가상 테이블)가 존재하는 경우에도 발생합니다.
제 경우 InnoDB에 문제가 있다는 것을 알게 되었습니다.실제 문제가 무엇인지는 알 수 없었지만 MyISAM으로 작성함으로써 구축이 가능했습니다.
mysqldump 대신 mysql 데이터베이스 디렉토리의 파일 시스템 복사본을 사용할 때 문제가 발생했습니다.MyISAM과 InnoDB 캐시 테이블 등 매우 큰 테이블이 몇 개 있습니다.데이터를 mysqldump 하는 것은 실용적이지 않습니다.MyISAM은 아직 실행 중이므로 Xtra Backup은 사용할 수 없습니다.
위와 같은 증상이 나에게 일어났다.테이블이 존재하지 않으며 디렉토리에 테이블과 관련된 파일이 없습니다.그러나 MySQL이 테이블을 인식하고 있기 때문에 생성할 수 없습니다.드롭 테이블은 존재하지 않는다고 합니다.테이블을 작성하면 있다고 합니다.
2대의 머신에서 문제가 발생.두 머신 모두 백업을 복사하여 해결되었습니다.다만, 백업에 가 있는 것을 알 수 있었습니다.MYD 및.MYI 파일입니다만, InnoDB에는 사용하지 않는 파일이라고 생각하고 있었습니다..MYD 및.MYI 파일에는 루트의 소유자가 있고 .frm은 mysql이 소유하고 있습니다.
백업에서 복사할 경우 파일 권한을 확인하십시오.테이블 플러시는 동작할 수 있지만 데이터베이스를 셧다운하고 재시작하도록 선택했습니다.
행운을 빌어요.
이런, 나도 같은 문제가 있었어osCommerce
에 많은 mysql 시스템에 mysql이 있다는 을 알 때까지 합니다.create table
되어 있기 db의 되지 dbs에서 해야 했습니다.dbs를 사용하다
CREATE 스테이트먼트는 staging env dump의 일부입니다.
저는 위에서 언급한 모든 것을 시도해 보았습니다.해결책을 찾지 못했습니다.하지만 내 구원의 길은 다음과 같았다.
데이터베이스 이름 대소문자의 구별을 수정했을 때 CREATE 스테이트먼트가 실제로 통과했다는 사실을 우연히 알게 되었습니다.이게 무슨 소리인가?나는 다른 테이블에서도 같은 일을 반복했다.
그러나 새로운 오류가 나타났다.'comments'에 대한 스트레이트 따옴표가 구문 오류를 던지고 있습니다.난 충격받았다.새로운 에러가 표시되기 시작했습니다.마침내 나는 해결책을 알았다.
해결책: 사용하고 있는 덤프는 MySql의 다른 버전일 수 있습니다.mysql workbench 로컬(머신에 설치)을 사용하여 스테이징 MYsql에 접속할 수 있는 허가를 받았습니다.스테이징 mysql 워크벤치에 로그인하기 위해 스테이징 서버에 rdp하지 않았습니다.거기서 덤프를 만들었습니다.쓰레기장을 뒤져봤더니 아주 잘 작동했어
백업 SQL 파일을 가져오려고 했지만 오류가 발생했습니다. 1050 "테이블은 이미 존재합니다."
설정:
- 윈도 7
- Mysql 5.5.16
솔루션:
- 서버 엔진을 InnoDB에서 MyISAM으로 변경.
- phpMyAdmin 사용 Import하려는 데이터베이스를 삭제했습니다.
- mysql 서비스를 재시작했다.
- 재 Import를 시도하여 동작했다.
제 경우 테이블과 같은 이름의 뷰가 있는 것이 문제였기 때문에 Import를 계속하기 위해 뷰를 드롭해야 했습니다.
drop view `my-view-that-has-same-name-as-table`;
자동화된 솔루션은 덤프 중에 일반 드롭 테이블을 이 sed로 교체하여 존재하는 뷰도 드롭하는 것입니다.
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
또는 덤프된 파일을 수신하여 db로 Import하는 경우
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` (
...
방금 같은 오류가 발생했지만 테이블이 이미 존재한다는 것을 알고 추가하기를 원했습니다.같은 에러를 찾았을 때 구글에서 이 질문이 1위로 뜨기 때문에 답변을 추가합니다.기본적으로 나는 체크해야 했다.
"DROP TABLE / VIEW / PROCEDURE / FUNTION / EVENT / 트리거 문 추가"
그리고 이것으로 저는 실수를 해결했습니다.
새로운 빈 데이터베이스에 Magento eCommerce용 .sql 덤프를 Import할 때 동일한 오류가 발생했습니다.위의 몇 가지 해결 방법을 시도했지만 효과가 없었습니다. 덤프 생성 방법을 변경하는 문제를 해결했습니다.
덤프를 생성할 때 단일 트랜잭션을 추가하면 문제가 해결되었습니다.
언급URL : https://stackoverflow.com/questions/3302476/mysql-1050-error-table-already-exists-when-in-fact-it-does-not
'itsource' 카테고리의 다른 글
오류 "Microsoft Visual C++ 14.0이 필요합니다(vcvarsall.bat을 찾을 수 없습니다)" (0) | 2022.12.24 |
---|---|
React JS -JS와 .JSX의 비교 (0) | 2022.12.24 |
PHP가 777 권한을 가진 디렉토리를 만들 수 없는 이유는 무엇입니까? (0) | 2022.12.24 |
함수가 정의되어 있는 장소를 확인하는 방법 (0) | 2022.12.04 |
PHP 메모리 프로파일링 (0) | 2022.12.04 |