MySQL "CREATE TABLE, ЕСЛИ НЕ СУЩЕСТВУЕТ" → Ошибка 1050

Используя команду:

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

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

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

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

Ответ 1

Прекрасно работает для меня в 5.0.27

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

Ответ 2

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

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

Ответ 3

Вы можете использовать следующий запрос для создания таблицы для конкретной базы данных в MySql.

create database if not exists `test`;

USE `test`;

SET @[email protected]@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`)

);

Ответ 4

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

Ответ 5

У меня была аналогичная проблема с @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

Ответ 6

create database if not exists 'test';

USE 'test';

SET @[email protected]@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')
);***

Ответ 7

Если кто-либо получает эту ошибку после экспорта Phpmyadmin, использование пользовательских параметров и добавление операторов "drop tables" очищают это право.

Ответ 8

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

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