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