¿Truncar todas las tablas en una base de datos MySQL en un comando?


346

¿Hay una consulta (comando) para truncar todas las tablas en una base de datos en una sola operación? Quiero saber si puedo hacer esto con una sola consulta.


1
Truncar todas las tablas? ¿quiso decir truncar todas las columnas de todas las tablas en una base de datos? ¿En qué idioma de consulta está esto? (por ejemplo, SQL, MySQL, Oracle, Postgres, etc.)
Jay

No estoy seguro de que recomendaría hacer esto, ya que fácilmente podría meterse en problemas. ¿Hay alguna razón por la que no puede simplemente ejecutar el script truncado y ejecutar el script?
GrayWizardx

gracias 4 la respuesta, pero no única razón de scripting que se está ejecutando corto de tiempo por lo pensado runnind una consulta en MySQL
Devang

Ya su consulta en medios mysql..and algo similar a la tabla truncada table_name..here quiero truncar todas las filas de todas las tablas en mi db en una consulta
Devang

Puede usar Information_Schema con un cursor. No estoy seguro acerca de MySql, pero debería admitir Information_Schema.Tables
GrayWizardx

Respuestas:


340

Drop (es decir, eliminar tablas)

mysql -Nse 'show tables' DATABASE_NAME | while read table; do mysql -e "drop table $table" DATABASE_NAME; done

Truncar (es decir, tablas vacías)

mysql -Nse 'show tables' DATABASE_NAME | while read table; do mysql -e "truncate table $table" DATABASE_NAME; done

17
Sí, limpio, ty. Pero es posible que deba ejecutar esto con -uUSER -pPASSWORD. También es posible que deba ejecutarlo varias veces si tiene FK sin borrar en cascada.
mihaicc

47
Si se encuentra con problemas de FK como " No se puede eliminar o actualizar una fila principal: falla una restricción de clave externa ", asegúrese de desactivar las comprobaciones de clave externa modificando el comando de la siguiente manera:mysql -e "SET FOREIGN_KEY_CHECKS = 0; drop table $table" DATABASE_NAME
Ethan P.

24
Sin embargo, no es necesario hacer un bucle en el cliente mysql. mysql -Nse 'show tables' DATABASE_NAME | while read table; do echo "drop table $table;"; done | mysql DATABASE_NAME
Sácalo

2
@TylerCollier necesitas un .my.cnf
Felix Eve

2
Con base en la respuesta y los comentarios anteriores, y debido a que no funcionaron como se esperaba para mí, hice un script bash simple que puedes usar para esto. Puede encontrarlo en: gist.github.com/mocanuga/eff26a3dcc40ef657a1c812f68511f6d
mocanuga

145

truncar varias tablas de base de datos en la instancia de Mysql

SELECT Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME, ';') 
FROM INFORMATION_SCHEMA.TABLES where  table_schema in ('db1_name','db2_name');

Usar resultado de consulta para truncar tablas

Nota: es posible que obtenga este error:

ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

Eso sucede si hay tablas con referencias de claves foráneas a la tabla que está tratando de soltar / truncar.

Antes de truncar las tablas Todo lo que necesita hacer es:

SET FOREIGN_KEY_CHECKS=0;

Trunca tus tablas y vuelve a cambiarlas a

SET FOREIGN_KEY_CHECKS=1;

1
Esta es probablemente la mejor solución si tiene un usuario y una contraseña para su base de datos, y no desea escribirlos visiblemente en su shell.
Bach

55
Upvoted porque esta solución requiere solo acceso a base de datos y no acceso SSH. Además, es independiente del sistema operativo.
mastazi

@mastazi tengo algunas preguntas: 1. ¿Qué significa "table_schema"? ¿está parado desde el nombre del esquema? 2.¿Qué significa TABLE_NAME? ¿está parado para las tablas que se deben eliminar? 3. ¿Debo escribir alto las tablas que se deben eliminar en el comando como "('db1_name', 'db2_name')"?
AAEM

@Ahmed, las únicas sustituciones requeridas es que debe reemplazar db1_name y db2_name con los nombres de sus bases de datos. Luego debe copiar los resultados de esta consulta, pegarlos como una nueva consulta mysql y ejecutarlos. INFORMATION_SCHEMA es un esquema incorporado que viene preinstalado en cada instalación de MySQL y contiene información sobre sus bases de datos, no lo toque o su MySQL comenzará a comportarse mal :-) table_schema y table_name son columnas de la tabla llamada "TABLES" dentro de information_schema
mastazi

por "db_name", ¿te refieres al nombre del esquema? solo tengo 1 esquema en el que quiero eliminar sus datos de tablas
AAEM

67

Use phpMyAdmin de esta manera:

Vista de base de datos => Verificar todo (tablas) => Vacío

Si desea ignorar las comprobaciones de claves externas, puede desmarcar la casilla que dice:

[] Habilitar comprobaciones de clave externa

Deberá ejecutar al menos la versión 4.5.0 o superior para obtener esta casilla de verificación.

No es MySQL CLI-fu, pero bueno, ¡funciona!


31
¿Quién dijo que estábamos ejecutando PHP ...?
jsh

37
¿Quién dijo que no? Esta respuesta aparentemente resulta útil para las personas; ayuda.
bzeaman

2
Esto no funcionará si tiene un esquema de base de datos padre-hijo.
Cary Bondoc

2
La restricción de clave externa falla.
Brian Hannay

2
@BrianHannay Se agregó en PMA 4.5.0 en junio de 2015. Encontré el registro de cambios y el problema original
Nemo

24

MS SQL Server 2005+ (Eliminar PRINT para la ejecución real ...)

EXEC sp_MSforeachtable 'PRINT ''TRUNCATE TABLE ?'''

Si su plataforma de base de datos admite vistas de INFORMATION_SCHEMA, tome los resultados de la siguiente consulta y ejecútelos.

SELECT 'TRUNCATE TABLE ' + TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

Prueba esto para MySQL:

SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES

Agregar un punto y coma al Concat hace que sea más fácil de usar, por ejemplo, desde mysql workbench.

SELECT Concat('TRUNCATE TABLE ', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES

hi..thanks para D Responder he intentado esta consulta, pero tampoco parece work..is der algo así como truncate table nombre_tabla el que puedo utilizar para todas las tablas en mi db ..
Devang

Olvidé que MySQL no es compatible con el operador "+" directamente. Suponiendo que ese sea el error, agregué el ejemplo CONCAT () anterior. Si aún recibe un mensaje de error, comparta el mensaje de error real.
playa

esta consulta funciona, pero ¿qué pasa si tengo un nombre de base de datos diferente, por ejemplo, devang ... es mi nombre de base de datos, así que si lo uso de acuerdo con su consulta anterior arroja el siguiente error ... La tabla 'devang.TABLES' no existe
devang

3
Ahh INFORMATION_SCHEMA es una vista que existe en la base de datos activa. Si cambia su base de datos, la vista se ejecutará en esa base de datos. No es necesario modificar la consulta al cambiar las bases de datos. Simplemente siga estos pasos: 1) cambie la base de datos activa. 2) ejecuta el script. 3) copie los resultados 4) pegue los resultados nuevamente en el editor 5) ejecute los resultados. Todas las tablas en la base de datos activa ahora están truncadas.
playa

1
¡TENER CUIDADO! Esto selecciona todas las tablas en todas las bases de datos (incluso las que NO están en la base de datos actual. El ejemplo de MySQL no funciona, pero en mi caso devolvió 293 filas (tablas) en lugar de 66. Imagine la pérdida de datos ...
f4der

19

Encontré esto para descartar todas las tablas en una base de datos:

mysqldump -uUSERNAME -pPASSWORD --add-drop-table --no-data DATABASENAME | grep ^DROP | mysql -uUSERNAME -pPASSWORD DATABASENAME

Útil si está limitado por la solución de alojamiento (no puede soltar una base de datos completa).

Lo modifiqué para truncar las tablas. No hay "--add-truncate-table" para mysqldump, así que lo hice:

mysqldump -uUSERNAME -pPASSWORD --add-drop-table --no-data DATABASENAME | grep ^DROP | sed -e 's/DROP TABLE IF EXISTS/TRUNCATE TABLE/g' | mysql -uUSERNAME -pPASSWORD DATABASENAME

funciona para mí: editar, corregir un error tipográfico en el último comando


15
SET FOREIGN_KEY_CHECKS = 0;

SELECT @str := CONCAT('TRUNCATE TABLE ', table_schema, '.', table_name, ';')
FROM   information_schema.tables
WHERE  table_type   = 'BASE TABLE'
  AND  table_schema IN ('db1_name','db2_name');

PREPARE stmt FROM @str;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

SET FOREIGN_KEY_CHECKS = 1;

Si desea trabajar con la base de datos actual (y, por lo tanto, hacer que este código sea portátil), cambie la última condición SELECTa esta:AND table_schema = DATABASE();
alx

No se trunca para mí. MySQL 5.7.25
Lucas Bustamante

14

Me pareció más simple hacer algo como el código a continuación, simplemente reemplazar los nombres de las tablas con los suyos. importante, asegúrese de que la última línea siempre sea SET FOREIGN_KEY_CHECKS = 1;

SET FOREIGN_KEY_CHECKS=0;
TRUNCATE `table1`;
TRUNCATE `table2`;
TRUNCATE `table3`;
TRUNCATE `table4`;
TRUNCATE `table5`;
TRUNCATE `table6`;
TRUNCATE `table7`;
SET FOREIGN_KEY_CHECKS=1;

77
no tiene que repetir SET FOREIGN_KEY_CHECKS = 0; después de cada comando TRUNCATE justo en la línea de inicio que marcará el modo como 0
HMagdy

12

Esto imprimirá el comando para truncar todas las tablas:

SELECT GROUP_CONCAT(Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME) SEPARATOR ';') FROM INFORMATION_SCHEMA.TABLES where table_schema in ('my_db');

5
  1. Para truncar una tabla, se deben eliminar las restricciones de clave externa asignadas a las columnas de esta tabla desde otras tablas (de hecho, en todas las tablas del DB / esquema específico).
  2. Por lo tanto, todas las restricciones de clave externa deben eliminarse inicialmente, seguidas del truncamiento de la tabla.
  3. Opcionalmente, use la tabla de optimización (en mysql, innodb engine esp) para reclamar el espacio / tamaño de datos utilizados al sistema operativo después del truncamiento de datos.
  4. Una vez que se realiza el truncamiento de datos, vuelva a crear las mismas restricciones de clave externa en la misma tabla. Vea a continuación un script que generaría el script para llevar a cabo las operaciones anteriores.

    SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY ',CONSTRAINT_NAME,';') FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
    WHERE CONSTRAINT_TYPE='FOREIGN KEY' AND TABLE_SCHEMA='<TABLE SCHEMA>'
    UNION
    SELECT CONCAT('TRUNCATE TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,';') FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA='<TABLE SCHEMA>' AND TABLE_TYPE='BASE TABLE'
    UNION
    SELECT CONCAT('OPTIMIZE TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,';') FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA='<TABLE SCHEMA>' AND TABLE_TYPE='BASE TABLE'
    UNION
    SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' ADD CONSTRAINT ',CONSTRAINT_NAME,' FOREIGN KEY(',COLUMN_NAME,')',' REFERENCES ',REFERENCED_TABLE_NAME,'(',REFERENCED_COLUMN_NAME,');') FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
    WHERE CONSTRAINT_NAME LIKE 'FK%' AND TABLE_SCHEMA='<TABLE SCHEMA>'
    INTO OUTFILE "C:/DB Truncate.sql" LINES TERMINATED BY '\n';

Ahora, ejecute el script Db Truncate.sql generado

Beneficios 1) Recuperar espacio en disco 2) No es necesario soltar y volver a crear el DB / Esquema con la misma estructura

Inconvenientes. 1) Las restricciones FK deben ser nombres en la tabla con el nombre que contenga 'FK' en el nombre de la restricción.


3

si usa sql server 2005, hay un procedimiento almacenado oculto que le permite ejecutar un comando o un conjunto de comandos en todas las tablas dentro de una base de datos. Así es como llamaría TRUNCATE TABLEcon este procedimiento almacenado:

EXEC [sp_MSforeachtable] @command1="TRUNCATE TABLE ?"

Aquí hay un buen artículo que elabora más.

Sin embargo, para MySql, podría usar mysqldump y especificar las opciones --add-drop-tablesy --no-datapara descartar y crear todas las tablas ignorando los datos. Me gusta esto:

mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE]

guía de uso de mysqldump de dev.mysql


3

Usa esto y forma la consulta

SELECT Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME, ';') 
FROM INFORMATION_SCHEMA.TABLES where  table_schema in (db1,db2)
INTO OUTFILE '/path/to/file.sql';

Ahora use esto para usar esta consulta

mysql -u username -p </path/to/file.sql

si recibes un error como este

ERROR 1701 (42000) at line 3: Cannot truncate a table referenced in a foreign key constraint

la forma más fácil de hacerlo es en la parte superior de su archivo, agregue esta línea

SET FOREIGN_KEY_CHECKS=0;

que dice que no queremos verificar las restricciones de clave externa mientras revisamos este archivo.

Truncará todas las tablas en las bases de datos db1 y bd2.


los nombres de db deben estar en qoutes
Roman M


2

Aquí está mi variante para tener 'una declaración para truncarlos a todos'.

Primero, estoy usando una base de datos separada llamada 'util' para mis procedimientos almacenados auxiliares. El código de mi procedimiento almacenado para truncar todas las tablas es:

DROP PROCEDURE IF EXISTS trunctables;
DELIMITER ;;
CREATE  PROCEDURE trunctables(theDb varchar(64))
BEGIN
    declare tname varchar(64);
    declare tcursor CURSOR FOR 
    SELECT table_name FROM information_schema.tables WHERE table_type <> 'VIEW' AND table_schema = theDb;
    SET FOREIGN_KEY_CHECKS = 0; 
    OPEN tcursor;
    l1: LOOP
        FETCH tcursor INTO tname;
        if tname = NULL then leave l1; end if;
        set @sql = CONCAT('truncate `', theDB, '`.`', tname, '`');
        PREPARE stmt from @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END LOOP l1;
    CLOSE tcursor;
    SET FOREIGN_KEY_CHECKS = 1; 
END ;;
DELIMITER ;

Una vez que tenga este procedimiento almacenado en su base de datos de utilidades, puede llamarlo como

call util.trunctables('nameofdatabase');

que ahora es exactamente una declaración :-)


2

aquí porque lo sé aquí

   SELECT Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME, ';') 
    FROM INFORMATION_SCHEMA.TABLES where  table_schema in ('databasename1','databasename2');

Si no puede eliminar o actualizar una fila principal: falla una restricción de clave externa

Eso sucede si hay tablas con referencias de claves foráneas a la tabla que está tratando de soltar / truncar.

Antes de truncar las tablas Todo lo que necesita hacer es:

SET FOREIGN_KEY_CHECKS=0;

Trunca tus tablas y vuelve a cambiarlas a

SET FOREIGN_KEY_CHECKS=1; 

usa este código php

    $truncate = mysql_query("SELECT Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME, ';') as tables_query FROM INFORMATION_SCHEMA.TABLES where table_schema in ('databasename')");

    while($truncateRow=mysql_fetch_assoc($truncate)){

        mysql_query($truncateRow['tables_query']);

    }
?>

ver detalle aquí enlace


1

Aquí hay un procedimiento que debería truncar todas las tablas en la base de datos local.

Avíseme si no funciona y eliminaré esta respuesta.

No probado

CREATE PROCEDURE truncate_all_tables()
BEGIN

   -- Declare local variables
   DECLARE done BOOLEAN DEFAULT 0;
   DECLARE cmd VARCHAR(2000);

   -- Declare the cursor
   DECLARE cmds CURSOR
   FOR
   SELECT CONCAT('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES;

   -- Declare continue handler
   DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;

   -- Open the cursor
   OPEN cmds;

   -- Loop through all rows
   REPEAT

      -- Get order number
      FETCH cmds INTO cmd;

      -- Execute the command
      PREPARE stmt FROM cmd;
      EXECUTE stmt;
      DROP PREPARE stmt;

   -- End of loop
   UNTIL done END REPEAT;

   -- Close the cursor
   CLOSE cmds;

END;

Me tomó mucho tiempo descubrir por qué esto no funcionaba. Luego, un comentario sobre este hilo de correo electrónico ayudó: foros.mysql.com/read.php?61,116597,219343#msg-219343 - Para referencia : "Desafortunadamente, parece que las declaraciones de preparación no se pueden usar en cursores. Del manual: dev.mysql.com/doc/refman/6.0/en/… "
Tominator

1

Encuentro que TRUNCATE TABLE ... tiene problemas con las restricciones de clave externa, incluso después de NOCHECK CONSTRAINT ALL, por lo que en su lugar uso una instrucción DELETE FROM. Esto significa que las semillas de identidad no se restablecen, siempre puede agregar un DBCC CHECKIDENT para lograr esto.

Uso el siguiente código para imprimir en la ventana de mensajes el sql para truncar todas las tablas de la base de datos, antes de ejecutarlo. Simplemente hace que sea un poco más difícil cometer un error.

EXEC sp_MSforeachtable 'PRINT ''ALTER TABLE ? NOCHECK CONSTRAINT ALL'''
EXEC sp_MSforeachtable 'print ''DELETE FROM ?'''
EXEC sp_MSforeachtable 'print ''ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all'''

0

No estoy seguro, pero creo que hay un comando con el que puede copiar el esquema de la base de datos en una nueva base de datos, una vez que haya hecho esto, puede eliminar la base de datos anterior y después de esto puede copiar nuevamente el esquema de la base de datos al nombre anterior.


1
mysqldump -uuser -ppassword --no-data salesLeadsBrittany> salesLeadsTemplate.sql Esto creará un archivo sql con el esquema solamente (sin datos). Puede eliminar la base de datos después de este comando y puede volver a crear la base de datos importando el esquema.
GJ.

0

Sé que este no es exactamente un comando, pero el resultado deseado se puede lograr desde phpMyAdmin siguiendo estos pasos:

  1. Seleccione (todas) las tablas que se eliminarán (Marcar todo)
  2. Seleccione "Soltar" / "Truncar" de la lista "Con seleccionado:"
  3. En la página de confirmación ("¿Realmente quieres:") copiar la consulta (todo con el fondo rojo)
  4. Ve a la parte superior y haz clic en SQL y escribe: "SET FOREIGN_KEY_CHECKS = 0;" luego pegue la consulta copiada previamente
  5. Haga clic en "Ir"

La idea es obtener rápidamente todas las tablas de la base de datos (lo que hace en 5 segundos y 2 clics) pero deshabilitar primero las comprobaciones de clave externa. Sin CLI y sin descartar la base de datos y agregarla nuevamente.


0
TB=$( mysql -Bse "show tables from DATABASE" );
for i in ${TB};
    do echo "Truncating table ${i}";
    mysql -e "set foreign_key_checks=0; set unique_checks=0;truncate table DATABASE.${i}; set foreign_key_checks=1; set unique_checks=1";
    sleep 1;
done

-

David

Gracias por tomarse el tiempo para formatear el código, pero así es como se supone que debe aplicarse.

-Kurt

En una caja UNIX o Linux:

Asegúrate de estar en un bash shell. Estos comandos deben ejecutarse desde la línea de comandos de la siguiente manera.

Nota:

Guardo mis credenciales en mi archivo ~ / .my.cnf, por lo que no necesito proporcionarlas en la línea de comandos.

Nota:

cpm es el nombre de la base de datos

Solo estoy mostrando una pequeña muestra de los resultados, de cada comando.

Encuentre sus restricciones de clave externa:

klarsen@Chaos:~$ mysql -Bse "select concat(table_name, ' depends on ', referenced_table_name)
             from information_schema.referential_constraints
             where constraint_schema = 'cpm'
             order by referenced_table_name"
  1. el sistema de aprobación_externa depende de la solicitud de aprobación
  2. dirección depende del cliente
  3. identificación_cliente depende del cliente
  4. external_id depende del cliente
  5. credencial depende del cliente
  6. email_address depende del cliente
  7. request_request depende del cliente
  8. customer_status depende del cliente
  9. customer_image depende del cliente

Enumere las tablas y los recuentos de filas:

klarsen@Chaos:~$ mysql -Bse "SELECT table_name, table_rows FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'cpm'" | cat -n

 1  address 297
 2  approval_external_system    0
 3  approval_request    0
 4  country 189
 5  credential  468
 6  customer    6776
 7  customer_identification 5631
 8  customer_image  2
 9  customer_status 13639

Truncar tus tablas:

klarsen@Chaos:~$ TB=$( mysql -Bse "show tables from cpm" ); for i in ${TB}; do echo "Truncating table ${i}"; mysql -e "set foreign_key_checks=0; set unique_checks=0;truncate table cpm.${i}; set foreign_key_checks=1; set unique_checks=1"; sleep 1; done
  1. Truncar la dirección de la tabla
  2. Truncando tabla sistema_externo_aprobación
  3. Truncar la tabla de aprobación
  4. Truncar tabla país
  5. Truncar la credencial de la tabla
  6. Truncar cliente de mesa
  7. Truncando tabla customer_identification
  8. Truncando la tabla customer_image
  9. Truncando tabla customer_status

Verifique que funcionó:

klarsen@Chaos:~$ mysql -Bse "SELECT table_name, table_rows FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'cpm'" | cat -n

 1  address 0
 2  approval_external_system    0
 3  approval_request    0
 4  country 0
 5  credential  0
 6  customer    0
 7  customer_identification 0
 8  customer_image  0
 9  customer_status 0
10  email_address   0

En una caja de Windows:

NOTA:

cpm es el nombre de la base de datos

C:\>for /F "tokens=*" %a IN ('mysql -Bse "show tables" cpm') do mysql -e "set foreign_key_checks=0; set unique_checks=0; truncate table %a; foreign_key_checks=1; set unique_checks=1" cpm

0

La siguiente consulta MySQL producirá una consulta única que truncará todas las tablas en una base de datos dada. Omite las teclas EXTRANJERAS:

SELECT CONCAT(
         'SET FOREIGN_KEY_CHECKS=0; ',
         GROUP_CONCAT(dropTableSql SEPARATOR '; '), '; ',
         'SET FOREIGN_KEY_CHECKS=1;'
       ) as dropAllTablesSql
FROM   ( SELECT  Concat('TRUNCATE TABLE ', table_schema, '.', TABLE_NAME) AS dropTableSql
         FROM    INFORMATION_SCHEMA.TABLES
         WHERE   table_schema = 'DATABASE_NAME' ) as queries

0
mysqldump -u root -p --no-data dbname > schema.sql
mysqldump -u root -p drop dbname
mysqldump -u root -p < schema.sql

0

Soln 1)

mysql> select group_concat('truncate',' ',table_name,';') from information_schema.tables where table_schema="db_name" into outfile '/tmp/a.txt';
mysql> /tmp/a.txt;

Soln 2)

- Export only structure of a db
- drop the database
- import the .sql of structure 

- editar ----

earlier in solution 1, i had mentioned concat() instead of group_concat() which would have not returned the desired result

1
Esto solo parece devolver la primera tabla: TRUNCATE table1, y se olvida de todas las otras tablas.
Stephen Smith

Esta solución definitivamente sería una locura. No sé por qué no obtuvo un voto. puede ser debido a mi error que ha sido editado.
Angelin Nadar

0

Esto funcionó para mí. Cambie la base de datos, el nombre de usuario y la contraseña en consecuencia.

mysql -Nse 'show tables' -D DATABASE -uUSER -pPWD | while read table; do echo "SET FOREIGN_KEY_CHECKS = 0;drop table \`$table\`;SET FOREIGN_KEY_CHECKS = 1;"; done | mysql DATABASE -uUSER -pPWD


-1

¿Una idea podría ser simplemente dejar caer y recrear las tablas?

EDITAR:

@ Jonathan Leffler: Verdadero

Otra sugerencia (o caso de que no necesite truncar TODAS las tablas):

¿Por qué no crear un procedimiento almacenado básico para truncar tablas específicas?

CREATE PROCEDURE [dbo].[proc_TruncateTables]
AS
TRUNCATE TABLE Table1
TRUNCATE TABLE Table2
TRUNCATE TABLE Table3
GO

Eso pierde todas las restricciones, permisos, vistas, etc. en las tablas, lo cual es una molestia considerable.
Jonathan Leffler

Puede hacer una eliminación, luego reiniciar todas las tablas en lugar de truncar. Supongo que la reducción es por frustración. Simplemente restaure su copia de seguridad.
Mark Redman

-5
<?php
// connect to database
$conn=mysqli_connect("localhost","user","password","database");

// check connection
if (mysqli_connect_errno()) {
  exit('Connect failed: '. mysqli_connect_error());
}

// sql query
$sql =mysqli_query($conn,"TRUNCATE " . TABLE_NAME);


// Print message
if ($sql === TRUE) {
  echo 'data delete successfully';
}
else {
 echo 'Error: '. $conn->error;
}

$conn->close();

?>

Aquí hay un fragmento de código que utilizo para borrar una tabla. Simplemente cambie $ conn info y TABLE_NAME.


Hola James, creo que el OP está buscando en primer lugar un trazador de líneas ... y en segundo lugar un comando para quitar todas las tablas y eliminarlas. Esto requiere algún tipo de intervención del usuario. gracias por el post sin embargo
Craig Wayne
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.