2008-09-17 21 views
19

Aquí es la cuestión actualización:MySql - Crear tabla si no existe Otra vez truncar?

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, se genera un mensaje de error en la truncado ya que la la tabla no existe todavía

¿Mi única opción es hacer el CREATE TABLE, ejecutar el TRUNCATE TABLE, y luego completar la tabla? (3) consultas separadas

pregunta original:

He estado teniendo un tiempo difícil tratando de averiguar si el siguiente es posible en MySQL sin tener que escribir el bloque SQL:

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar 

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

Este código se ejecutará mediante PHP.

Respuesta

20

shmuel613, sería mejor actualizar su pregunta original en lugar de responder. Lo mejor es que haya un solo lugar que contenga la pregunta completa en lugar de tenerlo disperso en una discusión.

La respuesta de Ben es razonable, excepto que parece tener un "no" donde no quiere una. Dejar caer la tabla solo si no existe no es del todo correcto.

De hecho necesitará varios enunciados.De cualquier forma condicional crear entonces poblar:

  1. Crear una tabla temporal si NO EXISTE fubar (int id, nombre varchar (80))
  2. TRUNCATE TABLE fubar
  3. INSERT INTO fubar SELECT * FROM barfu

o simplemente eliminar y reconstruir

  1. DROP TABLE IF EXISTS fubar
  2. CREAR TABLA TEMPORAL fubar SELECT id, nombre barfu

Con SQL pura esas son sus dos clases reales de soluciones. Me gusta el segundo mejor

(Con un procedimiento almacenado, podría reducirlo a una sola sentencia. Algo como: TruncateAndPopulate (fubar) Pero para el momento en que escriba el código para TruncateAndPopulate() pasará más tiempo que solo usar el SQL anterior.)

2

¿qué tal:

drop table if exists fubar; 
create table fubar; 

O quiso decir lo que desea es hacerlo con una sola consulta?

+0

¿Dejarlo si t _no existe? – 11684

+0

¡Uy! Buen punto. – Ben

3

Podría hacer el truncado después de 'crear si no existe'. De esa manera siempre existirá ... y siempre estará vacío en ese punto.

CREATE TABLE fubar IF NOT EXISTS 
TRUNCATE TABLE fubar 
0

OK entonces, no está mal. Para ser más específicos, 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, se genera un mensaje de error en la truncado ya que la tabla no existe todavía.

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

PD: ¡gracias por responder tan rápido!

3

ejecutar cualquier consulta si existe una tabla.

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

  • procedimiento controlará por la existencia de la tabla de base de datos, nombre bajo el nombre y ejecutará de cadena de consulta si existe. A continuación se presenta 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 ; 

More on Mysql

Cuestiones relacionadas