2009-09-30 18 views
13

Tengo una base de datos de desarrollo (MYSQL) que me gustaría cargar con datos nuevos en algún momento. Me gustaría eliminar el contenido de todas las tablas. ¿Cuál es la mejor manera, tan automatizada como sea posible, para eliminar el contenido de todas las tablas (incluidas las que tienen restricciones de clave externa). ¿Hay restricciones truncadas all/drop all equivalentes?Truncar todas las tablas (la mayoría de las cuales tienen restricciones). Cómo colocarlos temporalmente

Gracias

Respuesta

0

Si desea truncar realmente todas las tablas de una mejor manera soy pienso soltar y crear base de datos con esquema de base de extraído previamente. O simplemente puede dos copias de la misma base de datos: prueba y vacía. Después de llenar sus tablas, simplemente borre la prueba db y copie el vacío para probar.

0

TRUNCATE (TABLE) tbl_name truncará una sola tabla. Puede pegar eso en un script y recorrerlo con todos sus nombres de tabla.

http://dev.mysql.com/doc/refman/5.0/en/truncate.html

Es posible que desee ver en las migraciones, también, pero creo que Alexey tiene el enfoque correcto allí. Es muy similar a cómo maneja RoR la reconstrucción de la base de datos de prueba en cada ejecución.

29

Creo que se puede hacer lo siguiente:

  1. deshabilitar la comprobación de restricción de clave externa

    mysql> SET FOREIGN_KEY_CHECKS = 0; 
    
  2. truncar tablas

    mysql> TRUNCATE MY_TABLE; 
    
  3. activa la revisión de restricción de clave externa

    mysql> SET FOREIGN_KEY_CHECKS = 1; 
    

prefiero deshabilitar las restricciones de clave externa temporalmente a la caída/recrearlos.

+0

Comentario rápido para cualquier persona que use 'PHPMYADMIN' para hacer esto. Si realiza todas las instrucciones anteriores en una línea SQL, funciona. Si intentas hacerlo de uno en uno, no funciona. Por supuesto, estoy seguro de que funciona en la línea de comandos 'mysql' regular como muestra @Pascal Thivent. – Sablefoste

0

Aquí es lo que hago desde la línea de comandos:

mysql -Nse 'show tables' DATABASE_NAME | while read table; do mysql -e "SET FOREIGN_KEY_CHECKS = 0; TRUNCATE table $table" DATABASE_NAME; done 

El problema es que, si se requiere autenticación, tendrá que añadir un -u YOUR_USERNAME -pYOURPASSWORD después de tanto mysql comandos.

Si no desea ingresar su contraseña en el símbolo del sistema (nunca lo hice), deberá copiar y pegar la contraseña después de cada aviso, que puede ser varias veces según el número de tablas

Cuestiones relacionadas