7
votes

Copier une base de données dans MySQL, comment copier des vues?

essayer de copier une base de données dans une nouvelle base de données, à l'aide d'un script PHP qui exécute des requêtes SQL sur un serveur MySQL. Le code que j'ai Sofar est:

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


0 commentaires

3 Réponses :


5
votes

Vous pouvez utiliser Information_schema.Voyages à voir la définition de vue ou montrer la vue de vue pour l'ensemble de la déclaration.


0 commentaires

2
votes

Une option serait d'aller avec show créer une vue pour chaque vue qui renvoie la syntaxe de création de vue.

voir 12.4.5.10. Afficher créer une syntaxe de vue pour plus de détails.


0 commentaires

0
votes

Le code suivant fonctionne pour moi. Il copiera toutes les vues de source_database à cible_database xxx


0 commentaires