programing tip

MySQL "CREATE TABLE IF NOT EXISTS"-> 오류 1050

itbloger 2021. 1. 8. 07:55
반응형

MySQL "CREATE TABLE IF NOT EXISTS"-> 오류 1050


명령 사용 :

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`)

);

귀하에게도 적용될 수있는 문제에 대한 해결책이 있습니다. 내 데이터베이스는 DROP TABLE테이블을 찾을 수 없어서 실패한 상태 였지만 CREATE TABLEMySQL이 테이블이 존재한다고 생각했기 때문에 실패했습니다. (이 상태는 IF NOT EXISTS 절을 쉽게 망칠 수 있습니다.)

결국 이 해결책을 찾았습니다 .

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 TABLEMySQL은 테이블이 여전히 존재한다고 생각했기 때문에 실패했습니다. 그래서 깨진 테이블은 phpmyadmin에서 볼 때 없었지만 어딘가에 여전히 존재했습니다.

I created this state by just copying the whole folder that contained a database with some MyISAM and some InnoDB tables

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

(this is not recommended!)

All InnoDB tables where not visible in the new database test in phpmyadmin.

sudo mysqladmin flush-tables didn't help either.

My solution: I had to delete the new test database with drop database test and copy it with mysqldump instead:

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

If anyone is getting this error after a Phpmyadmin export, using the the custom options and adding the "drop tables" statements cleared this right up.


Create mysql connection with following parameter. "'raise_on_warnings': False". It will ignore the warning. e.g.

config = {'user': 'user','password': 'passwd','host': 'localhost','database': 'db',   'raise_on_warnings': False,}
cnx = mysql.connector.connect(**config)

ReferenceURL : https://stackoverflow.com/questions/1650946/mysql-create-table-if-not-exists-error-1050

반응형