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.

¿Fue útil?

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top