Troncare tutte le tabelle in un database MySQL in un comando?


346

Esiste una query (comando) per troncare tutte le tabelle in un database in un'unica operazione? Voglio sapere se posso farlo con una sola query.


1
Tronca tutti i tavoli? intendevi troncare tutte le colonne di tutte le tabelle in un database? In che lingua di query si trova? (ad es. SQL, MySQL, Oracle, Postgres, ecc.)
Jay,

Non sono sicuro che consiglierei di farlo perché potresti facilmente metterti nei guai. C'è un motivo per cui non puoi semplicemente scrivere i tronchi ed eseguire lo script?
GrayWizardx,

grazie 4 la risposta, ma l'unico motivo per cui non è stato eseguito lo script è in breve tempo, quindi ho pensato di eseguire una query in mysql
devang

ya è in mysql..e query significa qualcosa di simile a troncare la tabella nome_tabella..qui voglio troncare tutte le righe di tutte le tabelle nel mio db in una query
devang

È possibile utilizzare Information_Schema con un cursore. Non sono sicuro di MySql, ma dovrebbe supportare Information_Schema.Tables
GrayWizardx il

Risposte:


340

Rilascia (es. Rimuovi tabelle)

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

Tronca (ovvero tabelle vuote)

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

17
Sì, pulito, ty. Ma potresti dover eseguire questo con -uUSER -pPASSWORD. Inoltre, potrebbe essere necessario eseguirlo più volte se si dispone di FK senza eliminazione in cascata.
mihaicc,

47
Se si verificano problemi FK come " Impossibile eliminare o aggiornare una riga padre: un vincolo di chiave esterna non riesce ", assicurarsi di disabilitare i controlli di chiave esterna modificando il comando come segue:mysql -e "SET FOREIGN_KEY_CHECKS = 0; drop table $table" DATABASE_NAME
Ethan P.

24
Non è necessario eseguire il ciclo del client mysql. Portalo fuori dal giro in questo modo:mysql -Nse 'show tables' DATABASE_NAME | while read table; do echo "drop table $table;"; done | mysql DATABASE_NAME
Alexander Shcheblikin,

2
@TylerCollier ti serve un .my.cnf
Felix Eve il

2
Sulla base della risposta e dei commenti sopra, e poiché non hanno funzionato come previsto per me, ho creato un semplice script bash che puoi usare per questo. Puoi trovarlo su: gist.github.com/mocanuga/eff26a3dcc40ef657a1c812f68511f6d
mocanuga

145

tronca più tabelle di database sull'istanza di Mysql

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

Utilizzare il risultato della query per troncare le tabelle

Nota: potrebbe darsi che otterrai questo errore:

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

Ciò accade se esistono tabelle con riferimenti di chiavi esterne alla tabella che si sta tentando di eliminare / troncare.

Prima di troncare le tabelle Tutto ciò che devi fare è:

SET FOREIGN_KEY_CHECKS=0;

Tronca i tuoi tavoli e cambialo in

SET FOREIGN_KEY_CHECKS=1;

1
Questa è probabilmente la soluzione migliore se hai un utente e una password per il tuo database e non vuoi scriverli visibilmente nella tua shell.
Bach

5
Eseguito l'upgrade perché questa soluzione richiede solo l'accesso al DB e non l'accesso SSH. Inoltre è indipendente dal sistema operativo.
Mastazi,

@mastazi ho alcune domande: 1. cosa significa "table_schema"? è in piedi dal nome dello schema? 2. cosa significa TABLE_NAME? sta per le tabelle che dovrebbero essere eliminate? 3. dovrei scrivere in alto le tabelle che devono essere eliminate nel comando come "('nome_db', 'nome_db')"?
AAEM,

@Ahmed le uniche sostituzioni richieste è che devi sostituire db1_name e db2_name con i nomi dei tuoi database. Quindi devi copiare i risultati di questa query e incollarli come una nuova query mysql ed eseguirli. INFORMATION_SCHEMA è uno schema incorporato che viene preinstallato in ogni installazione di MySQL e contiene informazioni sui tuoi database, non toccarlo o il tuo MySQL inizierà a comportarsi male :-) table_schema e table_name sono colonne della tabella chiamata "TABLES" all'interno information_schema
mastazi,

per "nome_db", intendi il nome dello schema? ho solo 1 schema che desidero cancellare i dati delle sue tabelle
AAEM

67

Usa phpMyAdmin in questo modo:

Vista database => Seleziona tutto (tabelle) => Vuoto

Se si desidera ignorare i controlli delle chiavi esterne, è possibile deselezionare la casella che dice:

[] Abilita controlli chiave esterna

Devi avere almeno la versione 4.5.0 o successiva per ottenere questa casella di controllo.

Non è MySQL CLI-fu, ma ehi, funziona!


31
chi ha detto che stavamo eseguendo PHP ...?
jsh

37
Chi ha detto che non l'abbiamo fatto? Questa risposta sembra apparentemente utile alle persone; aiuta.
bzeaman,

2
Questo non funzionerà se si dispone di uno schema di database padre-figlio.
Cary Bondoc,

2
Il vincolo di chiave esterna non riesce.
Brian Hannay,

2
@BrianHannay E 'stato aggiunto in PMA 4.5.0 nel giugno 2015. Ho trovato il changelog ed il problema originale
Nemo

24

MS SQL Server 2005+ (Rimuovi PRINT per l'esecuzione effettiva ...)

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

Se la tua piattaforma di database supporta le viste INFORMATION_SCHEMA, prendi i risultati della seguente query ed eseguili.

SELECT 'TRUNCATE TABLE ' + TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

Prova questo per MySQL:

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

L'aggiunta di un punto e virgola al Concat semplifica l'utilizzo, ad esempio, da mysql workbench.

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

ciao..grazie per aver risposto ho provato questa query ma non sembra funzionare..è qualcosa di simile a troncare table table_name che posso usare per tutte le tabelle nel mio db ..
devang

Ho dimenticato che MySQL non supporta direttamente l'operatore "+". Supponendo che sia l'errore, ho aggiunto l'esempio CONCAT () sopra. Se ricevi ancora un messaggio di errore, ti preghiamo di condividere il messaggio di errore effettivo.
spiaggia

questa query funziona ma cosa succede se ho un nome db diff, ad esempio devang..è il mio nome db, quindi se lo uso in base alla query precedente genera l'errore foll .. La tabella 'devang.TABLES' non esiste
devang

3
Ahh. INFORMATION_SCHEMA è una vista esistente nel database attivo. Se si modifica il database, la vista verrà quindi eseguita su quel DB. Non è necessario modificare la query quando si cambiano i database. Segui questi passaggi: 1) modifica il database attivo. 2) eseguire lo script. 3) copia i risultati 4) incolla i risultati nell'editor 5) esegui i risultati. Tutte le tabelle nel database attivo sono ora troncate.
spiaggia

1
ATTENZIONE! Questo seleziona tutte le tabelle in tutti i database (anche quelli NON presenti nel database corrente. L'esempio MySQL non funziona, ma nel mio caso ha restituito 293 righe (tabelle) anziché 66. Immagina la perdita di dati ...
f4der,

19

Ho trovato questo per eliminare tutte le tabelle in un database:

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

Utile se sei limitato dalla soluzione di hosting (non è in grado di eliminare un intero database).

L'ho modificato per troncare le tabelle. Non esiste "--add-truncate-table" per mysqldump, quindi ho fatto:

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

funziona per me - modifica, correggendo un refuso nell'ultimo 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;

Se vuoi lavorare con il database corrente (e quindi rendere questo codice portatile), modifica l'ultima condizione in SELECTquesta:AND table_schema = DATABASE();
alx

Non si tronca per me. MySQL 5.7.25
Lucas Bustamante,

14

Ho trovato molto semplice fare qualcosa come il codice qui sotto, basta sostituire i nomi delle tabelle con i tuoi. importante assicurarsi che l'ultima riga sia sempre 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;

7
non è necessario ripetere SET FOREIGN_KEY_CHECKS = 0; dopo ogni comando TRUNCATE appena alla linea di partenza che segnerà la modalità come 0
HMagdy

12

Questo stamperà il comando per troncare tutte le tabelle:

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

5
  1. Per troncare una tabella, è necessario eliminare i vincoli di chiave esterna associati alle colonne in questa tabella da altre tabelle (in effetti su tutte le tabelle nel DB / schema specifico).
  2. Pertanto, tutti i vincoli di chiave esterna devono essere eliminati inizialmente seguiti dal troncamento della tabella.
  3. Facoltativamente, utilizzare la tabella di ottimizzazione (in mysql, innodb engine esp) per recuperare lo spazio / le dimensioni dei dati utilizzati sul sistema operativo dopo il troncamento dei dati.
  4. Una volta eseguito il troncamento dei dati, creare nuovamente gli stessi vincoli di chiave esterna sulla stessa tabella. Vedi sotto uno script che genererebbe lo script per eseguire le operazioni di cui sopra.

    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';

Ora, esegui lo script Db Truncate.sql generato

Benefici. 1) Recupera spazio su disco 2) Non necessario per eliminare e ricreare il DB / Schema con la stessa struttura

Inconvenienti. 1) I vincoli FK devono essere nomi nella tabella con il nome contenente "FK" nel nome del vincolo.


3

se si utilizza SQL Server 2005, esiste una stored procedure nascosta che consente di eseguire un comando o un set di comandi su tutte le tabelle all'interno di un database. Ecco come si chiamerebbe TRUNCATE TABLEcon questa procedura memorizzata:

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

Ecco un buon articolo che elabora ulteriormente.

Per MySql, tuttavia, è possibile utilizzare mysqldump e specificare le opzioni --add-drop-tablese --no-dataper eliminare e creare tutte le tabelle ignorando i dati. come questo:

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

guida all'uso di mysqldump da dev.mysql


3

Usa questo e forma la query

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

Ora usa questo per usare questa query

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

se ricevi un errore come questo

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

il modo più semplice per procedere è nella parte superiore del file aggiungere questa riga

SET FOREIGN_KEY_CHECKS=0;

che dice che non vogliamo controllare i vincoli di chiave esterna durante la lettura di questo file.

Troncerà tutte le tabelle nei database db1 e bd2.


i nomi dei db dovrebbero essere in qoutes
Roman M


2

Ecco la mia variante per avere 'una dichiarazione per troncare' tutti '.

In primo luogo, sto usando un database separato chiamato 'util' per le mie procedure memorizzate helper. Il codice della mia procedura memorizzata per troncare tutte le tabelle è:

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 volta che hai memorizzato questa procedura nel tuo database util, puoi chiamarla come

call util.trunctables('nameofdatabase');

che ora è esattamente una frase :-)


2

qui per lo so qui

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

Se non è possibile eliminare o aggiornare una riga principale: un vincolo di chiave esterna non riesce

Ciò accade se esistono tabelle con riferimenti di chiavi esterne alla tabella che si sta tentando di eliminare / troncare.

Prima di troncare le tabelle Tutto ciò che devi fare è:

SET FOREIGN_KEY_CHECKS=0;

Tronca i tuoi tavoli e cambialo in

SET FOREIGN_KEY_CHECKS=1; 

utente questo codice 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']);

    }
?>

controlla i dettagli qui link


1

Ecco una procedura che dovrebbe troncare tutte le tabelle nel database locale.

Fammi sapere se non funziona e eliminerò questa risposta.

Non testato

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;

Mi ci è voluto molto tempo per capire perché non funzionava. Quindi un commento su questo thread di posta elettronica ha aiutato: forums.mysql.com/read.php?61,116597,219343#msg-219343 - Per riferimento : "Sfortunatamente, sembra che le istruzioni di preparazione non possano essere usate nei cursori. Dal manuale: dev.mysql.com/doc/refman/6.0/en/… "
Tominator

1

Trovo che TRUNCATE TABLE .. abbia problemi con i vincoli di chiave esterna, anche dopo un NOCHECK VINCERE TUTTO, quindi uso invece un'istruzione DELETE FROM. Ciò significa che i seed di identità non vengono ripristinati, per ottenere ciò è sempre possibile aggiungere un DBCC CHECKIDENT.

Uso il codice seguente per stampare nella finestra di messaggio sql per troncare tutte le tabelle nel database, prima di eseguirlo. Rende solo un po 'più difficile fare un errore.

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

Non sono sicuro, ma penso che ci sia un comando che consente di copiare lo schema del database in un nuovo database, una volta fatto questo è possibile eliminare il vecchio database e dopo questo è possibile copiare nuovamente lo schema del database con il vecchio nome.


1
mysqldump -uuser -ppassword --no-data salesLeadsBrittany> salesLeadsTemplate.sql Questo creerà un file sql con solo lo schema (nessun dato). È possibile eliminare il database dopo questo comando e ricreare il database importando lo schema.
GJ.

0

So che questo non è esattamente un comando, ma il risultato desiderato può essere ottenuto da phpMyAdmin seguendo questi passaggi:

  1. Seleziona (tutte) le tabelle da rimuovere (Controlla tutto)
  2. Seleziona "Elimina" / "Tronca" dall'elenco "Con selezionato:"
  3. Nella pagina di conferma ("Vuoi davvero:") copiare la query (tutto con lo sfondo rosso)
  4. Vai in alto e fai clic su SQL e scrivi: "SET FOREIGN_KEY_CHECKS = 0;" quindi incolla la query precedentemente copiata
  5. Fai clic su "Vai"

L'idea è di ottenere rapidamente tutte le tabelle dal database (cosa che si fa in 5 secondi e 2 clic) ma disabilitare prima i controlli delle chiavi esterne. Nessuna CLI e nessuna eliminazione del database e aggiunta di nuovo.


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,

Grazie per aver dedicato del tempo a formattare il codice, ma è così che dovrebbe essere applicato.

-Kurt

Su una scatola UNIX o Linux:

Assicurati di essere in una shell bash. Questi comandi devono essere eseguiti, dalla riga di comando come segue.

Nota:

Conservo le mie credenziali nel mio file ~ / .my.cnf, quindi non ho bisogno di fornirle sulla riga di comando.

Nota:

cpm è il nome del database

Sto solo mostrando un piccolo esempio dei risultati, da ciascun comando.

Trova i tuoi vincoli di chiave esterna:

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. Approvation_external_system dipende dall'approvazione_questione
  2. l'indirizzo dipende dal cliente
  3. customer_identification dipende dal cliente
  4. external_id dipende dal cliente
  5. le credenziali dipendono dal cliente
  6. email_address dipende dal cliente
  7. la richiesta di approvazione dipende dal cliente
  8. customer_status dipende dal cliente
  9. customer_image dipende dal cliente

Elenca le tabelle e i conteggi delle righe:

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

Tronca i tuoi tavoli:

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. Troncare l'indirizzo della tabella
  2. Troncando la tabella Approvation_external_system
  3. Troncando la tabella di approvazione_questa
  4. Troncando il paese della tabella
  5. Troncare le credenziali della tabella
  6. Troncando il cliente della tabella
  7. Troncando la tabella customer_identification
  8. Troncando la tabella customer_image
  9. Tabella troncante customer_status

Verifica che abbia funzionato:

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

In una finestra di Windows:

NOTA:

cpm è il nome del database

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 seguente query MySQL produrrà essa stessa una singola query che troncerà tutte le tabelle in un determinato database. Ignora i tasti ESTERI:

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 

-- modificare ----

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

1
Questo sembra solo restituire la prima tabella: TRUNCATE table1 e dimentica tutte le altre tabelle.
Stephen Smith,

Questa soluzione sarebbe sicuramente folle. non so perché non abbia ottenuto un voto. potrebbe essere a causa del mio errore che è stato modificato.
Angelin Nadar,

0

Questo ha funzionato per me. Modificare database, nome utente e password di conseguenza.

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

Un'idea potrebbe essere quella di eliminare e ricreare le tabelle?

MODIFICARE:

@Jonathan Leffler: True

Altro suggerimento (o caso non è necessario troncare TUTTE le tabelle):

Perché non creare semplicemente una stored procedure di base per troncare tabelle specifiche

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

Ciò perde tutti i vincoli, i permessi, le viste, ecc. Sulle tabelle, il che è un fastidio considerevole.
Jonathan Leffler,

È possibile eseguire un'eliminazione, quindi ridimensionare tutte le tabelle anziché troncarle. Presumo che il mark down sia per frustrazione. Basta ripristinare il backup.
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();

?>

Ecco lo snippet di codice che utilizzo per cancellare una tabella. Basta cambiare $ conn info e TABLE_NAME.


hey James, penso che l'OP stia cercando innanzitutto una linea ... e in secondo luogo un comando per ottenere tutti i tavoli una volta fuori ed eliminarli. questo richiede una sorta di intervento dell'utente. grazie per il post però
Craig Wayne
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.