Pregunta

Aquí está la pregunta actualizada:

la consulta actual está haciendo algo como:

$sql1 = "TRUNCATE TABLE fubar";
$sql2 = "CREATE TEMPORARY TABLE IF NOT EXISTS fubar SELECT id, name FROM barfu";

La primera vez que se ejecuta el método que contiene esto, genera un mensaje de error al truncarlo ya que la tabla aún no existe.

¿Es mi única opción hacer el CREATE TABLE, ejecuta el TRUNCATE TABLE, y luego llenar la tabla?(3 consultas separadas)

La pregunta original era:

Me ha resultado difícil intentar descubrir si lo siguiente es posible en MySql sin tener que escribir block sql:

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar

Si ejecuto truncar por separado antes de crear tabla y la tabla no existe, aparece un mensaje de error.Estoy intentando eliminar ese mensaje de error sin tener que agregar más consultas.

Este código se ejecutará usando PHP.

¿Fue útil?

Solución

shmuel613, sería mejor actualizar su pregunta original en lugar de responder.Es mejor si hay un solo lugar que contenga la pregunta completa en lugar de distribuirla en una discusión.

La respuesta de Ben es razonable, excepto que parece tener un "no" cuando no lo quiere.Dejar caer la mesa sólo si no existir no es del todo correcto.

De hecho, necesitará varias declaraciones.O crea condicionalmente y luego completa:

  1. CREAR TABLA TEMPORAL SI NO EXISTE fubar (id int, nombre varchar(80))
  2. TABLA TRUNCADA fubar
  3. INSERTAR EN fubar SELECCIONAR * DESDE barfu

o simplemente soltar y recrear

  1. TABLA DE SOLTAR SI EXISTE fubar
  2. CREAR TABLA TEMPORAL fubar SELECCIONAR id, nombre DE barfu

Con SQL puro, esas son sus dos clases reales de soluciones.Me gusta más el segundo.

(Con un procedimiento almacenado podrías reducirlo a una sola declaración.Algo como:TruncateAndPopulate(fubar) Pero cuando escriba el código para TruncateAndPopulate(), dedicará más tiempo que simplemente usar el SQL anterior).

Otros consejos

Puede truncar después de "crear si no existe".Así siempre existirá...y estar siempre vacío en ese punto.

CREATE TABLE fubar IF NOT EXISTS
TRUNCATE TABLE fubar

ejecutar cualquier consulta si la tabla existe.

Uso: call Edit_table(database-name,table-name,query-string);

  • El procedimiento comprobará la existencia del nombre de la tabla en el nombre de la base de datos y ejecutará la cadena de consulta si existe.El siguiente es el procedimiento almacenado:
DELIMITER $$

DROP PROCEDURE IF EXISTS `Edit_table` $$
CREATE PROCEDURE `Edit_table` (in_db_nm varchar(20), in_tbl_nm varchar(20), in_your_query varchar(200))
DETERMINISTIC
BEGIN

DECLARE var_table_count INT;

select count(*) INTO @var_table_count from information_schema.TABLES where TABLE_NAME=in_tbl_nm and TABLE_SCHEMA=in_db_nm;
IF (@var_table_count > 0) THEN
  SET @in_your_query = in_your_query;
  #SELECT @in_your_query;
  PREPARE my_query FROM @in_your_query;
  EXECUTE my_query;

ELSE
  select "Table Not Found";
END IF;

END $$
DELIMITER ;

Más sobre MySQL

qué tal si:

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

¿O quisiste decir que solo quieres hacerlo con una sola consulta?

Bueno, entonces no está mal.Para ser más específico, la consulta actual hace algo como:

$sql1 = "TRUNCATE TABLE fubar";
$sql2 = "CREATE TEMPORARY TABLE IF NOT EXISTS fubar SELECT id, name FROM barfu";

La primera vez que se ejecuta el método que contiene esto, genera un mensaje de error al truncarlo ya que la tabla aún no existe.

¿Mi única opción es hacer "CREAR TABLA", ejecutar "TRUNCAR TABLA" y luego llenar la tabla?(3 consultas separadas)

PD: ¡gracias por responder tan rápido!

Si estás usando PHP, usa mysql_list_tables para comprobar que la tabla existe antes de TRUNCARLA.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top