Ответ 1
Прекрасно работает для меня в 5.0.27
Я просто получаю предупреждение (а не ошибку), что таблица существует;
Используя команду:
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 @[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`)
);
У меня есть решение проблемы, которая может также применяться к вам. Моя база данных находилась в состоянии, где 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 @[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')
);***
Если кто-либо получает эту ошибку после экспорта Phpmyadmin, использование пользовательских параметров и добавление операторов "drop tables" очищают это право.
Создайте соединение mysql со следующим параметром. "'raise_on_warnings': False". Он будет игнорировать предупреждение. например.
config = {'user': 'user','password': 'passwd','host': 'localhost','database': 'db', 'raise_on_warnings': False,}
cnx = mysql.connector.connect(**config)