MySQL "СОЗДАЙТЕ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ" -> Ошибка 1050 - PullRequest
50 голосов
/ 30 октября 2009

Использование команды:

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

Запуск этого дважды в MySQL Query Browser приводит к:

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

Я бы подумал, что создание таблицы "ЕСЛИ НЕ СУЩЕСТВУЕТ" не приведет к ошибкам. Я что-то упустил или это ошибка? Я использую версию 5.1 . Спасибо.

Ответы [ 8 ]

44 голосов
/ 30 октября 2009

отлично работает у меня в 5.0.27

Я просто получаю предупреждение (не об ошибке), что таблица существует;

23 голосов
/ 08 августа 2010

Как уже говорилось, это предупреждение, а не ошибка, но (если вы, как и я) хотите, чтобы все работало без предупреждений, вы можете отключить это предупреждение, а затем снова включить его, когда закончите.

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
5 голосов
/ 18 декабря 2015

Вы можете использовать следующий запрос для создания таблицы для конкретной базы данных в 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`)

);
3 голосов
/ 23 ноября 2010

У меня есть решение проблемы, которое также может относиться к вам. Моя база данных находилась в состоянии, когда 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)

2 голосов
/ 16 ноября 2017
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`)
);***
0 голосов
/ 02 декабря 2018

Если кто-то получает эту ошибку после экспорта Phpmyadmin, использование пользовательских опций и добавление операторов «drop tables» прояснили это право.

0 голосов
/ 22 июня 2017

У меня была проблема, похожая на @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
0 голосов
/ 08 февраля 2014

Создать mysql соединение со следующим параметром. msgstr "Raise_on_warnings": False ". Это будет игнорировать предупреждение. например,

config = {'user': 'user','password': 'passwd','host': 'localhost','database': 'db',   'raise_on_warnings': False,}
cnx = mysql.connector.connect(**config)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...