MySQL & # 8220; CREAR TABLA SI NO EXISTE & # 8221; - > Error 1050
-
22-07-2019 - |
Pregunta
Usando el comando:
CREATE TABLE IF NOT EXISTS `test`.`t1` (
`col` VARCHAR(16) NOT NULL
) ENGINE=MEMORY;
Ejecutar esto dos veces en el MySQL Query Browser da como resultado:
La tabla 't1' ya existe Error 1050
Pensé que crear la tabla "SI NO EXISTE" No arrojaría errores. ¿Me estoy perdiendo algo o es un error? Estoy ejecutando la versión 5.1 . Gracias.
Solución
Funciona bien para mí en 5.0.27
Acabo de recibir una advertencia (no un error) de que la tabla existe;
Otros consejos
Como ya se dijo, es una advertencia, no un error, pero (si como yo) desea que las cosas se ejecuten sin advertencias, puede deshabilitar esa advertencia y luego volver a habilitarla cuando haya terminado.
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
Puede usar la siguiente consulta para crear una tabla para una base de datos particular en 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`)
);
Tengo una solución a un problema que también puede aplicarse a usted. Mi base de datos estaba en un estado en el que una DROP TABLE
fallaba porque no podía encontrar la tabla ... pero una CREATE TABLE
también fallaba porque MySQL pensaba que la tabla existía. (Este estado podría interferir fácilmente con su cláusula SI NO EXISTE).
Finalmente encontré esta solución :
sudo mysqladmin flush-tables
Para mí, sin el sudo
, recibí el siguiente error:
mysqladmin: refresh failed; error: 'Access denied; you need the RELOAD privilege for this operation'
(Ejecutando en 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`)
);***
Tuve un problema similar al @CraigWalker en debian: mi base de datos estaba en un estado en el que DROP TABLE
falló porque no pudo encontrar la tabla, pero un CREATE TABLE
también falló porque MySQL pensó que la tabla todavía existía. Así que la mesa rota todavía existía en algún lugar, aunque no estaba allí cuando miré en phpmyadmin.
Creé este estado simplemente copiando toda la carpeta que contenía una base de datos con algunas MyISAM
y algunas tablas InnoDB
cp -a /var/lib/mysql/sometable /var/lib/mysql/test
(¡esto no se recomienda!)
Todas las tablas de InnoDB no estaban visibles en la nueva base de datos test
en phpmyadmin.
sudo mysqladmin flush-tables
tampoco ayudó.
Mi solución: tuve que eliminar la nueva base de datos de prueba con soltar prueba de base de datos
y copiarla con mysqldump
en su lugar:
mysqldump somedatabase -u username -p -r export.sql
mysql test -u username -p < export.sql
Si alguien obtiene este error después de una exportación de Phpmyadmin, utilice las opciones personalizadas y agregue las "tablas de caída". las declaraciones aclararon esto de inmediato.
Cree una conexión mysql con el siguiente parámetro. " 'raise_on_warnings': Falso " ;. Ignorará la advertencia. por ejemplo,
config = {'user': 'user','password': 'passwd','host': 'localhost','database': 'db', 'raise_on_warnings': False,}
cnx = mysql.connector.connect(**config)