crear tablas en mysql con primary key y foreign key
MySql: ¿Crear tabla si no existe? Truncar? (6)
OK, entonces, no está mal. Para ser más específico, 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 en el truncado ya que la tabla aún no existe.
¿Es mi única opción hacer "CREATE TABLE", ejecutar la "TRUNCATE TABLE", y luego llenar la tabla? (3 consultas separadas)
PD: ¡gracias por responder tan rápido!
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 en el truncado ya que la tabla aún no existe.
¿Es mi única opción hacer CREATE TABLE
, ejecutar TRUNCATE TABLE
y luego llenar la tabla? (3 consultas separadas)
la pregunta original fue:
He estado teniendo dificultades para tratar de averiguar si lo siguiente es posible en MySql sin tener que escribir el bloque sql:
CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar
Si ejecuto truncar por separado antes de crear la tabla, y la tabla no existe, entonces 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á usando PHP.
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
Si está usando PHP, use mysql_list_tables para verificar que la tabla exista antes de TRUNCATE.
ejecutar cualquier consulta si la tabla existe.
Uso: call Edit_table(database-name,table-name,query-string);
- El procedimiento verificará la existencia de table-name bajo database-name y ejecutará query-string si existe. A continuación está 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 ;
qué tal si:
drop table if exists fubar;
create table fubar;
¿O quisiste decir que solo quieres hacerlo con una sola consulta?
shmuel613, sería mejor actualizar tu pregunta original en lugar de responder. Es mejor si hay 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 uno. Dejar caer la mesa solo si no existe no es del todo correcto.
De hecho, necesitará múltiples declaraciones. O bien crea condicionalmente y luego rellena:
- CREAR TABLA TEMPORAL SI NO EXISTE fubar (id int, name varchar (80))
- TRUNCATE TABLE fubar
- INSERT INTO fubar SELECT * FROM barfu
o simplemente soltar y recrear
- TABLA DE CAÍDA SI EXISTE fubar
- CREAR LA TABLA TEMPORAL fubar SELECT id, nombre FROM barfu
Con SQL puro esas son sus dos clases reales de soluciones. Me gusta el segundo mejor
(Con un procedimiento almacenado, puede reducirlo a una sola declaración. 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).