MySQL «СОЗДАЙТЕ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ» - > Ошибка 1050

StackOverflow https://stackoverflow.com/questions/1650946

  •  22-07-2019
  •  | 
  •  

Вопрос

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

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

Выполнение этого дважды в MySQL Query Browser приводит к:

  

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

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

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 на 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

Если кто-то получит эту ошибку после экспорта в Phpmyadmin, используйте пользовательские параметры и добавьте " удаленные таблицы " заявления прояснили это прямо.

Создайте соединение MySQL со следующим параметром. " повышение_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