mysql拷贝表

文章

总述

现在每个表都是按用户的意愿生成的,每个表的字段大体上相同,但是会有一两个不同的字段,该怎么做?

几种拷贝表的方式

拷贝表结构到新表中

CREATE TABLE new LIKE origin;

拷贝数据到新表中

注意:这个语句其实只是把select语句的结果建一个表。所以 new 这个表不会有主键,索引。

CREATE TABLE new AS   
(   
    SELECT *   
    FROM origin   
); 

真正的复制一个表

CREATE TABLE new LIKE origin;   
INSERT INTO new SELECT * FROM origin;

操作不同的数据库

CREATE TABLE new LIKE shop.origin;   

新建的表的字段改名

CREATE TABLE new AS   
(   
    SELECT id, username AS uname, password AS pass FROM origin   
);

实现

因为表中的字段大部分相同,所以需要找出相同的字段

获取表中的字段

        //获取表字段信息
    public function getColumnName($tableName){
        $sql=<<<EOF
        select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where table_name="$tableName";
EOF;
        $queryResult=$this->pdo->query($sql);
        $resultArray=array();
        $rows=$queryResult->fetchAll(PDO::FETCH_ASSOC);
        foreach ($rows as $row) {
            $resultArray[]=$row['COLUMN_NAME'];
        }
        return $resultArray;
    }

找出相同的字段,然后拷贝

        /**
     * [copyDataToNewTable 拷贝上一个月表中的数据]
     * @param  [string] $oldTableName [上一个月原表]
     * @param  [string] $newTableName [新表]
     * @return [boolean]              [返回值]
     */
    public function copyDataToNewTable($oldTableName,$newTableName){
        $whatIWant=array();
        $columnName_oldTable=$this->getColumnName($oldTableName);
        $columnName_newTable=$this->getColumnName($newTableName);
        foreach ($columnName_oldTable as $key1 => $value1) {
            foreach ($columnName_newTable as $key2 => $value2) {
                if($columnName_oldTable[$key1]==$columnName_newTable[$key2]){
                    $whatIWant[]= $columnName_oldTable[$key1];
                }
            }
        }
        $whatIWant_result=join(",",$whatIWant);
        $sql=<<<EOF
        insert  into `$newTableName`($whatIWant_result) select $whatIWant_result from `$oldTableName`;
EOF;
        $queryResult=$this->pdo->exec($sql);
        if($queryResult)
        {
            return true;
        }
        else{
            return false;
        } 
    }
« sublime text 2 插件使用 img 中alt和tittle的区别 »

留下一句吧