2011-08-10 6 views
5

Essayer de copier une base de données dans une nouvelle base de données, en utilisant un script PHP qui exécute des requêtes SQL sur un serveur MySQL. Le code que j'ai sofar est-:Copier une base de données dans MySQL, comment copier des vues?

$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"; 
     } 
    } 
} 

Cela ressemble actuellement à toutes les tables de old_news de $, trouve le type de table dans la information_schema, et crée une table identique new_news de $ selon le type. Pour les tables, il crée la même structure de table, puis 'INSERT INTO SELECT' pour les remplir.

Comment copier une vue sans mysqldump la base de données entière?

Répondre

4

Vous pouvez utiliser INFORMATION_SCHEMA.VIEWS pour voir la définition de vue ou SHOW CREATE VIEW pour l'instruction entière.

Questions connexes