php - seleccionar - ¿Cómo colocar todas las tablas en la base de datos sin perder la base de datos?
mostrar tablas de una base de datos mysql en php (8)
Cuando tuve que hacer esto en Oracle, escribiría una declaración de selección que generaría las declaraciones de la tabla de caída para mí. Algo en el efecto de:
Seleccione ''TABLE TABLE'' || nombre_tabla || '';'' de user_tables;
Entonces podría canalizar la salida de la declaración de selección a un archivo. Después de ejecutar esto, tendría un archivo que eliminaría todas mis tablas por mí. Se vería algo así como:
DROP TABLE TABLE1;
DROP TABLE TABLE2;
DROP TABLE TABLE3;
etc ...
No soy un experto en mysql, pero me imagino que tendría una facilidad similar para seleccionar todas las tablas para un esquema, así como para la salida directa desde una declaración SQL a un archivo.
Me gustaría eliminar todas las tablas de la base de datos, pero no eliminar la base de datos en sí. Es posible ? Solo busco una forma más corta que eliminar la base de datos y volver a crearla. Gracias !
Hay algunas soluciones aquí en los comentarios: http://dev.mysql.com/doc/refman/5.1/en/drop-table.html
La consulta de una sola línea para eliminar todas las tablas, como a continuación:
$dbConnection = mysqli_connect("hostname", "username", "password", "database_name");
$dbConnection->query(''SET foreign_key_checks = 0'');
$qry_drop = "DROP TABLE IF EXISTS buildings, business, computer, education, fashion, feelings, food, health, industry, music, nature, people, places, religion, science, sports, transportation, travel";
$dbConnection->query($qry_drop);
$mysqli->query(''SET foreign_key_checks = 1'');
$mysqli->close();
Necesitaba eliminar todas las tablas excepto un par de un volcado involuntario.
Una función de PHP para eliminar todas las tablas excepto algunas (adaptadas de here ), para cualquier otra persona que pueda necesitar:
<?php
$mysqli = new mysqli( "localhost", "user", ''password'', "database");
function drop_all_tables($exceptions_array, $conn) {
$exceptions_string="(''" ;
foreach ($exceptions_array as $table) {
$exceptions_string .=$table . "'',''";
}
$exceptions_string=rtrim($exceptions_string, ",''");
$exceptions_string .="'')" ;
$sql="SELECT CONCAT(''DROP TABLE '', TABLE_NAME, ''; '')
FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_name NOT IN $exceptions_string";
$result=$ conn->query($sql);
while($row = $result->fetch_array(MYSQLI_NUM)) {
$conn->query($row[0]);
}
}
//drop_all_tables(array("table1","table2","table3","table4"), $mysqli);
?>
No hay una manera simple de hacer esto. O tendrás que saber de antemano cuáles son las tablas:
// edit puede obtener esta información usando la consulta SHOW TABLE STATUS
$tables = array(''users'',''otherdata'');
foreach($tables as $table){
db.execute("DROP TABLE "+$table);
}
o puedes dejar la base de datos y volver a crearla vacía (¡en realidad no es mucho esfuerzo!):
db.execute(''DROP DATABASE SITEDATA'');
db.execute(''CREATE DATABASE SITEDATA'');
Tendría que eliminar cada tabla en la base de datos por separado, por lo que eliminar la base de datos y volver a crearla será la ruta más corta (y la más rápida para esa materia).
Use SHOW TABLE STATUS
para obtener todas las tablas en su base de datos, luego haga un bucle sobre el resultado y suéltelas una por una.
Lo más corto es volver a crear la base de datos. pero si no quieres ...
Esto es para MySQL / PHP. No probado pero algo así.
$mysqli = new mysqli("host", "my_user", "my_password", "database");
$mysqli->query(''SET foreign_key_checks = 0'');
if ($result = $mysqli->query("SHOW TABLES"))
{
while($row = $result->fetch_array(MYSQLI_NUM))
{
$mysqli->query(''DROP TABLE IF EXISTS ''.$row[0]);
}
}
$mysqli->query(''SET foreign_key_checks = 1'');
$mysqli->close();