MySQL “CREATE TABLE SE NÃO EXISTE” -> Erro 1050
-
22-07-2019 - |
Pergunta
Usando o comando:
CREATE TABLE IF NOT EXISTS `test`.`t1` (
`col` VARCHAR(16) NOT NULL
) ENGINE=MEMORY;
A execução deste duas vezes nos resultados do MySQL Query Browser em:
Table 't1' já existe Erro 1050
Eu teria pensado que criar a tabela "SE NÃO EXISTE" não jogaria erros. Estou faltando alguma coisa ou isso é um bug? Estou executando a versão 5,1 . Obrigado.
Solução
funciona bem para mim em 5.0.27
Eu só receberá um aviso (não um erro) que a tabela existe;
Outras dicas
Como já foi dito, é um aviso não um erro, mas (se como eu) você quer que as coisas correr sem avisos, você pode desativar esse aviso, em seguida, reativá-lo novamente quando você está feito.
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
Você pode usar a seguinte consulta para criar uma tabela para um banco de dados específico em 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`)
);
Eu tenho uma solução para um problema que também pode se aplicar a você. Meu banco de dados estava em um estado onde um DROP TABLE
falhou porque não foi possível encontrar a tabela ... mas um CREATE TABLE
também falhou porque MySQL pensou existiu a mesa. (Este estado poderia facilmente mexer com a sua SE NÃO EXISTE cláusula).
Eu finalmente encontrei esta solução :
sudo mysqladmin flush-tables
Para mim, sem a sudo
, eu tenho o seguinte erro:
mysqladmin: refresh failed; error: 'Access denied; you need the RELOAD privilege for this operation'
(rodando no Mac 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`)
);***
Eu tive um problema semelhante como @CraigWalker no debian: Meu banco de dados estava em um estado onde um DROP TABLE
falhou porque não foi possível encontrar a tabela, mas uma CREATE TABLE
também falhou porque MySQL pensou a mesa ainda existia. Então a mesa quebrada ainda existia em algum lugar, embora ela não estava lá quando eu olhei no phpMyAdmin.
Eu criei este estado por apenas copiar toda a pasta que continha um banco de dados com algum MyISAM
e algumas mesas InnoDB
cp -a /var/lib/mysql/sometable /var/lib/mysql/test
(isso não é recomendado!)
tabelas Todos InnoDB onde não é visível no novo test
banco de dados em phpmyadmin.
sudo mysqladmin flush-tables
fez não quer ajudar.
Minha solução: Eu tive que excluir o novo banco de dados de teste com drop database test
e copiá-lo com mysqldump
vez:
mysqldump somedatabase -u username -p -r export.sql
mysql test -u username -p < export.sql
Se alguém está recebendo este erro após uma exportação Phpmyadmin, usando o as opções personalizadas e adicionando as "mesas gota" declarações cancelou esta acima da direita.
Criar uma ligação mysql com seguinte parâmetro. " 'raise_on_warnings': Falso". Ele vai ignorar o aviso. por exemplo.
config = {'user': 'user','password': 'passwd','host': 'localhost','database': 'db', 'raise_on_warnings': False,}
cnx = mysql.connector.connect(**config)