MySQL "создать таблицу, если не существует" - > ошибка 1050

С помощью команды:

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

запуск этого дважды в браузере запросов MySQL приводит к:

таблица ' t1 ' уже существует ошибка 1050

Я бы подумал, что создание таблицы "если не существует" не приведет к ошибкам. Я что-то пропустил или это баг? Я запускаю версию 5.1. Спасибо.

7 ответов


отлично работает для меня в 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 TABLE также не удалось, потому что MySQL думал, что таблица существует. (Это состояние может легко испортить ваше предложение 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)


у меня была похожая проблема, как @CraigWalker на debian: моя база данных была в состоянии, когда 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

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

создайте соединение mysql со следующим параметром. "raise_on_warnings: False". Он проигнорирует предупреждение. например,

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