문제

명령 사용:

CREATE TABLE IF NOT EXISTS `test`.`t1` (
    `col` VARCHAR(16) NOT NULL
) ENGINE=MEMORY;

MySQL 쿼리 브라우저에서 이를 두 번 실행하면 다음과 같은 결과가 발생합니다.

테이블 't1'이 이미 존재합니다. 오류 1050

"IF NOT EXISTS" 테이블을 생성하면 오류가 발생하지 않을 것이라고 생각했을 것입니다.내가 뭔가를 놓치고 있는 걸까요, 아니면 버그인가요?버전을 실행 중입니다. 5.1.감사해요.

도움이 되었습니까?

해결책

5.0.27에서 나에게 잘 작동합니다

테이블이 존재한다는 경고 (오류가 아님)를 얻습니다.

다른 팁

이미 언급했듯이, 그것은 오류가 아닌 경고이지만 (나처럼) 경고없이 물건을 실행하기를 원한다면 해당 경고를 비활성화 한 다음 완료되면 다시 활성화 할 수 있습니다.

SET sql_notes = 0;      -- Temporarily disable the "Table already exists" warning
CREATE TABLE IF NOT EXISTS ...
SET sql_notes = 1;      -- And then re-enable the warning again

다음 쿼리를 사용하여 MySQL의 특정 데이터베이스에 테이블을 만들 수 있습니다.

create database if not exists `test`;

USE `test`;

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;

/*Table structure for table `test` */

CREATE TABLE IF NOT EXISTS `tblsample` (

  `id` int(11) NOT NULL auto_increment,   
  `recid` int(11) NOT NULL default '0',       
  `cvfilename` varchar(250)  NOT NULL default '',     
  `cvpagenumber`  int(11) NULL,     
  `cilineno` int(11)  NULL,    
  `batchname`  varchar(100) NOT NULL default '',
  `type` varchar(20) NOT NULL default '',    
  `data` varchar(100) NOT NULL default '',
   PRIMARY KEY  (`id`)

);

나는 당신에게도 적용될 수있는 문제에 대한 해결책이 있습니다. 내 데이터베이스는 a DROP TABLE 테이블을 찾을 수 없었기 때문에 실패했지만 CREATE TABLE MySQL은 테이블이 존재한다고 생각했기 때문에 실패했습니다. (이 상태는 당신의 조항이 아닌 경우 쉽게 엉망이 될 수 있습니다).

나는 결국 발견했다 이 솔루션:

sudo mysqladmin flush-tables

나를 위해,없이 sudo, 다음 오류가 발생했습니다.

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

(OS X 10.6에서 실행)

create database if not exists `test`;

USE `test`;

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;

/*Table structure for table `test` */

***CREATE TABLE IF NOT EXISTS `tblsample` (
  `id` int(11) NOT NULL auto_increment,   
  `recid` int(11) NOT NULL default '0',       
  `cvfilename` varchar(250)  NOT NULL default '',     
  `cvpagenumber`  int(11) NULL,     
  `cilineno` int(11)  NULL,    
  `batchname`  varchar(100) NOT NULL default '',
  `type` varchar(20) NOT NULL default '',    
  `data` varchar(100) NOT NULL default '',
   PRIMARY KEY  (`id`)
);***

데비안에서 @CraigWalker와 비슷한 문제가 발생했습니다.내 데이터베이스는 다음과 같은 상태였습니다. DROP TABLE 테이블을 찾을 수 없어서 실패했지만 CREATE TABLE MySQL은 테이블이 여전히 존재한다고 생각했기 때문에 실패했습니다.그래서 깨진 테이블은 내가 phpmyadmin을 볼 때 거기에 없었지만 여전히 어딘가에 존재했습니다.

데이터베이스가 포함된 전체 폴더를 일부 항목으로 복사하여 이 상태를 만들었습니다. MyISAM 그리고 일부 InnoDB 테이블

cp -a /var/lib/mysql/sometable /var/lib/mysql/test

(이것은 권장되지 않습니다!)

새 데이터베이스에 표시되지 않는 모든 InnoDB 테이블 test phpmyadmin에서.

sudo mysqladmin flush-tables 도움이 되지도 않았습니다.

내 솔루션: 다음을 사용하여 새 테스트 데이터베이스를 삭제해야 했습니다. drop database test 그리고 그것을 복사 mysqldump 대신에:

mysqldump somedatabase -u username -p -r export.sql
mysql test -u username -p < export.sql

Phpmyadmin 내보내기 후이 오류가 발생하는 경우 사용자 정의 옵션을 사용하고 "드롭 테이블"문을 추가하면이를 바로 정리했습니다.

다음 매개 변수로 MySQL 연결을 만듭니다. " 'Raise_on_warnings': false". 경고를 무시합니다. 예를 들어

config = {'user': 'user','password': 'passwd','host': 'localhost','database': 'db',   'raise_on_warnings': False,}
cnx = mysql.connector.connect(**config)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top