2011-08-10 23 views
5

Intentando copiar una base de datos en una nueva base de datos, usando un script PHP que ejecuta consultas SQL en un servidor MySQL. El código que tengo hasta la fecha se es:Copiando una base de datos en MySQL, ¿cómo copiar vistas?

$dbh->exec("CREATE DATABASE IF NOT EXISTS $new_news CHARACTER SET UTF8;"); 
$results = $dbh->query("SHOW TABLES FROM $old_news"); 
$table_list = $results->fetchAll(PDO::FETCH_NUM); 

foreach($table_list as $table_row){ 
    foreach($table_row as $table){ 
     $results = $dbh->query("SELECT table_type FROM information_schema.tables where table_schema = '$old_news' and table_name = '$table'"); 
     $table_type = $results->fetch(PDO::FETCH_ASSOC); 
     $table_type = $table_type['table_type']; 
     if($table_type == 'BASE TABLE'){ 
      echo "Creating table $table and populating...\n"; 
      $dbh->exec("CREATE TABLE $new_news.$table LIKE $old_news.$table"); 
      $dbh->exec("INSERT INTO $new_news.$table SELECT * FROM $old_news.$table"); 
     }else if($table_type == 'VIEW'){ 
      //echo "Creating view $table...\n"; 
      //$dbh->exec("CREATE VIEW $new_news.$table LIKE $old_news.$table"); 
      echo "$table is a view, which cannot be copied atm\n"; 
     }else{ 
      echo "Skipping $table_type $table, unsupported type\n"; 
     } 
    } 
} 

este momento se ve en todas las tablas de $ old_news, encuentra el tipo de tabla en el INFORMATION_SCHEMA, y crea una tabla idéntica en $ new_news dependiendo del tipo. Para las tablas, crea la estructura de la tabla de la misma manera, luego 'INSERT INTO SELECT' para llenarlas.

¿Cómo se puede copiar una vista sin mysqldump en toda la base de datos?

Respuesta

4

Puede utilizar INFORMATION_SCHEMA.VIEWS para ver la definición de la vista, o SHOW CREATE VIEW durante toda la declaración.

Cuestiones relacionadas