比对两个数据库中相同表的差异字段

/** 处理两个数据库中表结构的差异    
     */
    public function deal_table(){
        $new_info = \DB::select("select * from INFORMATION_SCHEMA.COLUMNS where table_schema = 'ce_one'");
        $old_info = \DB::connection('old_database')->select("select * from INFORMATION_SCHEMA.COLUMNS where table_schema = 'ce_two'");
//        dd($new_info,$old_info);
        /**TABLE_SCHEMA – 库名
        TABLE_NAME – 表名
        COLUMN_NAME – 字段名称
        COLUMN_DEFAULT – 默认值
        IS_NULLABLE – 是否可以为 NULL
        DATA_TYPE – 数据类型,如:int
        CHARACTER_MAXIMUM_LENGTH – 最大长度
        COLUMN_TYPE – 类型,如:int(10) unsigned
        COLUMN_COMMENT – 注释*/
        $new_column=[]; //新库中所有的字段 按表分组
        $same=[];   //新 旧 库相同的数据
        foreach ($new_info as $k => $v){
            $new_column[$v->TABLE_NAME][]=$v->COLUMN_NAME;

            foreach ($old_info as $kk => $vv){
                if($v->TABLE_NAME == $vv->TABLE_NAME){
                    if($v->COLUMN_NAME == $vv->COLUMN_NAME && $v->COLUMN_DEFAULT == $vv->COLUMN_DEFAULT &&
                        $v->IS_NULLABLE == $vv->IS_NULLABLE && $v->DATA_TYPE == $vv->DATA_TYPE &&
                        $v->CHARACTER_MAXIMUM_LENGTH == $vv->CHARACTER_MAXIMUM_LENGTH && $v->COLUMN_TYPE == $vv->COLUMN_TYPE &&
                        $v->COLUMN_COMMENT == $vv->COLUMN_COMMENT){
                        $same[$v->TABLE_NAME][]=$v->COLUMN_NAME;
                    }
                }
            }
        }

//        dd($new_column,$same);

        $diff_column=[];        //每张表中旧库 和新库不同的字段
        foreach ($new_column as $k => $v){
            foreach ($same as $kk => $vv){
                if($k == $kk){
                    $diff_column[$k]=array_diff($v,$vv);     //取出两张表中的差异字段
                }
            }
        }

        return  $diff_column;

    }

比对两个数据库中不同的表

$new_tables = array_map('reset', \DB::select('SHOW TABLES'));   //获取所有表名
$old_tables = array_map('reset', \DB::connection('blt')->select('SHOW TABLES'));   //获取所有表名
$diff_table=array_diff($old_tables,$new_tables);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值