zoukankan      html  css  js  c++  java
  • 【草稿整理】【mysql】两个数据库结构对比

    1、草稿: 

      1 -- 1.将mysql分隔符从;设置为&
      2 DELIMITER &
      3 
      4 -- 2.如果存在存储过程getdatabaseCount则删除
      5 DROP PROCEDURE IF EXISTS `getdatabaseCount` &
      6 -- 3.定义存储过程,获取特定数据库的数量
      7 -- (传入参数database_name字符串类型,为数据库名;传出参数count_date整数类型,为数量)
      8 CREATE DEFINER=`root`@`localhost` PROCEDURE getdatabaseCount(IN database_name CHAR(20), OUT count_date INT) 
      9     BEGIN
     10     -- 4.声明变量
     11     DECLARE $sqltext VARCHAR(1000);
     12     -- 5.动态sql,把sql返回值放到@count_date中
     13     SET $sqltext = CONCAT('SELECT COUNT(*) into @count_date FROM information_schema.COLUMNS t where t.`TABLE_SCHEMA` = '', database_name, '';');
     14     SET @sqlcounts := $sqltext;
     15     -- 6.预编释,stmt预编释变量的名称
     16     PREPARE stmt FROM @sqlcounts;
     17     -- 7.执行SQL语句
     18     EXECUTE stmt; 
     19     -- 8.释放资源
     20     DEALLOCATE PREPARE stmt;
     21     -- 9.获取动态SQL语句返回值
     22     SET count_date = @count_date;
     23     END
     24 -- 10.定义存储过程结束
     25 &
     26 
     27 -- 2.如果存在存储过程getCount则删除
     28 DROP PROCEDURE IF EXISTS `getTableCount` &
     29 -- 3.定义存储过程,获取特定数据库表的数量
     30 -- (传入参数database_name字符串类型,为数据库名;传入参数table_name字符串类型,为表名;传出参数count_date整数类型,为数量)
     31 CREATE DEFINER=`root`@`localhost` PROCEDURE getTableCount(IN database_name CHAR(20), IN table_name CHAR(200), OUT count_date INT) 
     32     BEGIN
     33     -- 4.声明变量
     34     DECLARE $sqltext VARCHAR(1000);
     35     -- 5.动态sql,把sql返回值放到@count_date中
     36     SET $sqltext = CONCAT('SELECT COUNT(*) into @count_date FROM information_schema.COLUMNS t where t.`TABLE_SCHEMA` = '', database_name, '' and t.`TABLE_NAME` = '', table_name, '';');
     37     SET @sqlcounts := $sqltext;
     38     -- 6.预编释,stmt预编释变量的名称
     39     PREPARE stmt FROM @sqlcounts;
     40     -- 7.执行SQL语句
     41     EXECUTE stmt; 
     42     -- 8.释放资源
     43     DEALLOCATE PREPARE stmt;
     44     -- 9.获取动态SQL语句返回值
     45     SET count_date = @count_date;
     46     END
     47 -- 10.定义存储过程结束
     48 &
     49 
     50 
     51 
     52 
     53 -- 2.如果存在存储过程getColumnCount则删除
     54 DROP PROCEDURE IF EXISTS `getColumnCount` &
     55 -- 3.定义存储过程,获取特定数据库表列的数量
     56 -- (传入参数database_name字符串类型,为数据库名;传入参数table_name字符串类型,为表名;传入参数column_name字符串类型,为列名;传出参数count_date整数类型,为数量)
     57 CREATE DEFINER=`root`@`localhost` PROCEDURE getColumnCount(IN database_name CHAR(20), IN table_name CHAR(200), IN column_name CHAR(200), OUT count_date INT) 
     58     BEGIN
     59     -- 4.声明变量
     60     DECLARE $sqltext VARCHAR(1000);
     61     -- 5.动态sql,把sql返回值放到@count_date中
     62     SET $sqltext = CONCAT('SELECT COUNT(*) into @count_date FROM information_schema.COLUMNS t where t.`TABLE_SCHEMA` = '', database_name, '' and t.`TABLE_NAME` = '', table_name, '' and t.`COLUMN_NAME` = '', column_name, '';');
     63     SET @sqlcounts := $sqltext;
     64     -- 6.预编释,stmt预编释变量的名称
     65     PREPARE stmt FROM @sqlcounts;
     66     -- 7.执行SQL语句
     67     EXECUTE stmt; 
     68     -- 8.释放资源
     69     DEALLOCATE PREPARE stmt;
     70     -- 9.获取动态SQL语句返回值
     71     SET count_date = @count_date;
     72     END
     73 -- 10.定义存储过程结束
     74 &
     75 
     76 
     77 -- 2.如果存在存储过程getColumnInfo则删除
     78 DROP PROCEDURE IF EXISTS `getColumnInfo` &
     79 -- 3.定义存储过程,获取特定数据库表列的信息
     80 -- (传入参数database_name字符串类型,为数据库名;传入参数table_name字符串类型,为表名;传入参数column_name字符串类型,为列名;传入参数column_info字符串类型,列信息;传出参数result_data字符串类型,信息)
     81 CREATE DEFINER=`root`@`localhost` PROCEDURE getColumnInfo(IN database_name CHAR(20), IN table_name CHAR(200), IN column_name CHAR(200), IN column_info CHAR(50), OUT result_data CHAR(20)) 
     82     BEGIN
     83     -- 4.声明变量
     84     DECLARE $sqltext VARCHAR(1000);
     85     -- 5.动态sql,把sql返回值放到@count_date中
     86     SET $sqltext = CONCAT('SELECT t.', column_info,' into @column_info FROM information_schema.COLUMNS t where t.`TABLE_SCHEMA` = '', database_name, '' and t.`TABLE_NAME` = '', table_name, '' and t.`COLUMN_NAME` = '', column_name, '';');
     87     SET @sqlcounts := $sqltext;
     88     -- 6.预编释,stmt预编释变量的名称
     89     PREPARE stmt FROM @sqlcounts;
     90     -- 7.执行SQL语句
     91     EXECUTE stmt; 
     92     -- 8.释放资源
     93     DEALLOCATE PREPARE stmt;
     94     -- 9.获取动态SQL语句返回值
     95     SET result_data = @column_info;
     96     END
     97 -- 10.定义存储过程结束
     98 &
     99 
    100 -- 11.如果存在存储过程comparison则删除
    101 DROP PROCEDURE IF EXISTS `comparison` &
    102 -- 12.定义存储过程,获取指定数据库关键词的表列名
    103 -- (传入参数database_n字符串类型,数据库名;传入参数collation_n字符串类型,具体编码类型;传入参数key_name字符串类型,为关键字;传出参数tableColumnNames字符串类型,表列名)
    104 CREATE DEFINER=`root`@`localhost` PROCEDURE comparison(IN database_1 CHAR(20), IN database_2 CHAR(20), IN column_info CHAR(50), OUT info TEXT) 
    105     BEGIN
    106     -- 13.声明变量。database_name查询出来的数据库,table_name查询出来的表名,column_name查询出来的列名,collation_name查询出来的具体编码类型
    107     DECLARE database_name, table_name, column_name, collation_name, result_data_1, result_data_2 CHAR(200);
    108     DECLARE this_info, database_table_no TEXT DEFAULT '';
    109     DECLARE database_count_1, database_count_2, resoult_count INT DEFAULT 0;
    110         -- 14.定义游标结束标识,默认为0
    111     DECLARE stopflag INT DEFAULT 0;
    112     -- 15.定义游标,其实就是临时存储sql返回的集合
    113     DECLARE sql_resoult CURSOR FOR SELECT t.TABLE_SCHEMA, t.TABLE_NAME, t.COLUMN_NAME, t.COLLATION_NAME FROM information_schema.COLUMNS t;
    114     -- 16.游标结束就设置为1
    115     DECLARE CONTINUE HANDLER FOR NOT FOUND SET stopflag=1;
    116     CALL getdatabaseCount(database_1, database_count_1);
    117     CALL getdatabaseCount(database_2, database_count_2);
    118     IF (database_count_1 <> 0 AND database_count_2 <> 0) THEN
    119         -- 17.打开游标
    120         OPEN sql_resoult;
    121             -- 18.读取游标中数据,存储到指定变量
    122             FETCH sql_resoult INTO database_name, table_name, column_name, collation_name;
    123             -- 19.没有结束继续往下走
    124             WHILE (stopflag=0) DO
    125                 BEGIN
    126                 -- 20.判断数据库是否为输入的数据库名称,和,指定具体编码类型,和,不含.
    127                 IF (database_name=database_1 AND INSTR(database_table_no, CONCAT(database_2, '_', table_name)) = 0) THEN
    128                     -- 21.调用存储过程,获取特定表列关键词的数量
    129                     CALL getTableCount(database_2, table_name, resoult_count);
    130                     -- 22.如果数量不等于0,那么记录表列名
    131                     IF (resoult_count <> 0) THEN
    132                         CALL getColumnCount(database_2, table_name, column_name, resoult_count);
    133                         -- 23.拼接字符串,不可直接用传出变量设值
    134                         IF (resoult_count <> 0) THEN
    135                             CALL getColumnInfo(database_1, table_name, column_name, column_info, result_data_1);
    136                             CALL getColumnInfo(database_2, table_name, column_name, column_info, result_data_2);
    137                             -- 23.拼接字符串,不可直接用传出变量设值
    138                             IF (result_data_1 <> result_data_2) THEN
    139                                 IF (this_info IS NULL OR this_info='') THEN
    140                                     SET this_info=CONCAT(table_name, '表的', column_name, '列的', column_info, '不一样;
    ');
    141                                 ELSE
    142                                     SET this_info=CONCAT(this_info, table_name, '表的', column_name, '列的', column_info, '不一样;
    ');
    143                                 END IF;
    144                             END IF;
    145                         ELSE
    146                             IF (this_info IS NULL OR this_info='') THEN
    147                                 SET this_info=CONCAT(database_2, '', table_name, '表的', column_name, '列不存在;
    ');
    148                             ELSE
    149                                 SET this_info=CONCAT(this_info, database_2, '', table_name, '表的', column_name, '列不存在;
    ');
    150                             END IF;
    151                         END IF;
    152                     ELSE
    153                         IF (this_info IS NULL OR this_info='') THEN
    154                             SET this_info=CONCAT(database_2, '', table_name, '表不存在;
    ');
    155                         ELSE
    156                             SET this_info=CONCAT(this_info, database_2, '', table_name, '表不存在;
    ');
    157                         END IF;
    158                         SET database_table_no=CONCAT(database_table_no, ';', database_2, '_', table_name, ';');
    159                     END IF;
    160                 ELSE
    161                     IF (database_name=database_2 AND INSTR(database_table_no, CONCAT(database_1, '_', table_name)) = 0) THEN
    162                         CALL getTableCount(database_1, table_name, resoult_count);
    163                         IF (resoult_count <> 0) THEN
    164                             CALL getColumnCount(database_1, table_name, column_name, resoult_count);
    165                             IF (resoult_count = 0) THEN
    166                                 IF (this_info IS NULL OR this_info='') THEN
    167                                     SET this_info=CONCAT(database_1, '', table_name, '表的', column_name, '列不存在;
    ');
    168                                 ELSE
    169                                     SET this_info=CONCAT(this_info, database_1, '', table_name, '表的', column_name, '列不存在;
    ');
    170                                 END IF;
    171                             END IF;
    172                         ELSE
    173                             IF (this_info IS NULL OR this_info='') THEN
    174                                 SET this_info=CONCAT(database_1, '', table_name, '表不存在;
    ');
    175                             ELSE
    176                                 SET this_info=CONCAT(this_info, database_1, '', table_name, '表不存在;
    ');
    177                             END IF;
    178                             SET database_table_no=CONCAT(database_table_no, ';', database_1, '_', table_name, ';');
    179                         END IF;
    180                     END IF;
    181                 END IF;
    182                 -- 24.读取游标中数据,存储到指定变量。(和18一样)
    183                 FETCH sql_resoult INTO database_name, table_name, column_name, collation_name;
    184                 END;
    185             END WHILE;
    186         -- 25.关闭游标
    187         CLOSE sql_resoult;
    188     ELSE
    189         IF (database_count_1 = 0 AND database_count_2 = 0) THEN
    190             SET this_info = CONCAT(database_1, '', database_2, '数据库不存在或为空数据库');
    191         ELSE
    192             IF (database_count_1 = 0) THEN
    193                 SET this_info = CONCAT(database_1, '数据库不存在或为空数据库');
    194             ELSE
    195                 SET this_info = CONCAT(database_2, '数据库不存在或为空数据库');
    196             END IF;
    197         END IF;
    198     END IF;
    199     -- 26.把数据放到传出参数
    200     SET info=this_info;
    201     END
    202 -- 27.定义存储过程结束
    203 &
    204 -- 28.将mysql分隔符从&设置为;
    205 DELIMITER ;
    206 -- 29.设置变量
    207 SET @database_1='my_test';
    208 SET @database_2='my_test2';
    209 SET @column_info='data_type';
    210 SET @count='';
    211 -- 30.调用存储过程
    212 CALL comparison(@database_1, @database_2, @column_info, @count);
    213 -- 31.打印
    214 SELECT @count;
    215 -- 32.如果存在存储过程则删除
    216 DROP PROCEDURE IF EXISTS `comparison`;

    2、整理:

      1 -- 1.将mysql分隔符从;设置为&
      2 DELIMITER &
      3 
      4 -- 2.如果存在存储过程getdatabaseCount则删除
      5 DROP PROCEDURE IF EXISTS `getdatabaseCount` &
      6 -- 3.定义存储过程,获取特定数据库的数量
      7 -- (传入参数database_name字符串类型,为数据库名;传出参数count_date整数类型,为数量)
      8 CREATE DEFINER=`root`@`localhost` PROCEDURE getdatabaseCount(IN database_name CHAR(20), OUT count_date INT) 
      9     BEGIN
     10     -- 4.声明变量
     11     DECLARE $sqltext VARCHAR(1000);
     12     -- 5.动态sql,把sql返回值放到@count_date中
     13     SET $sqltext = CONCAT('SELECT COUNT(*) into @count_date FROM information_schema.COLUMNS t where t.`TABLE_SCHEMA` = '', database_name, '';');
     14     SET @sqlcounts := $sqltext;
     15     -- 6.预编释,stmt预编释变量的名称
     16     PREPARE stmt FROM @sqlcounts;
     17     -- 7.执行SQL语句
     18     EXECUTE stmt; 
     19     -- 8.释放资源
     20     DEALLOCATE PREPARE stmt;
     21     -- 9.获取动态SQL语句返回值
     22     SET count_date = @count_date;
     23     END
     24 -- 10.定义存储过程结束
     25 &
     26 
     27 -- 11.如果存在存储过程getTableCount则删除
     28 DROP PROCEDURE IF EXISTS `getTableCount` &
     29 -- 12.定义存储过程,获取特定数据库表的数量
     30 -- (传入参数database_name字符串类型,为数据库名;传入参数table_name字符串类型,为表名;传出参数count_date整数类型,为数量)
     31 CREATE DEFINER=`root`@`localhost` PROCEDURE getTableCount(IN database_name CHAR(20), IN table_name CHAR(200), OUT count_date INT) 
     32     BEGIN
     33     -- 13.声明变量
     34     DECLARE $sqltext VARCHAR(1000);
     35     -- 14.动态sql,把sql返回值放到@count_date中
     36     SET $sqltext = CONCAT('SELECT COUNT(*) into @count_date FROM information_schema.COLUMNS t where t.`TABLE_SCHEMA` = '', database_name, '' and t.`TABLE_NAME` = '', table_name, '';');
     37     SET @sqlcounts := $sqltext;
     38     -- 15.预编释,stmt预编释变量的名称
     39     PREPARE stmt FROM @sqlcounts;
     40     -- 16.执行SQL语句
     41     EXECUTE stmt; 
     42     -- 17.释放资源
     43     DEALLOCATE PREPARE stmt;
     44     -- 18.获取动态SQL语句返回值
     45     SET count_date = @count_date;
     46     END
     47 -- 19.定义存储过程结束
     48 &
     49 
     50 
     51 -- 20.如果存在存储过程getColumnCount则删除
     52 DROP PROCEDURE IF EXISTS `getColumnCount` &
     53 -- 21.定义存储过程,获取特定数据库表列的数量
     54 -- (传入参数database_name字符串类型,为数据库名;传入参数table_name字符串类型,为表名;传入参数column_name字符串类型,为列名;传出参数count_date整数类型,为数量)
     55 CREATE DEFINER=`root`@`localhost` PROCEDURE getColumnCount(IN database_name CHAR(20), IN table_name CHAR(200), IN column_name CHAR(200), OUT count_date INT) 
     56     BEGIN
     57     -- 22.声明变量
     58     DECLARE $sqltext VARCHAR(1000);
     59     -- 23.动态sql,把sql返回值放到@count_date中
     60     SET $sqltext = CONCAT('SELECT COUNT(*) into @count_date FROM information_schema.COLUMNS t where t.`TABLE_SCHEMA` = '', database_name, '' and t.`TABLE_NAME` = '', table_name, '' and t.`COLUMN_NAME` = '', column_name, '';');
     61     SET @sqlcounts := $sqltext;
     62     -- 24.预编释,stmt预编释变量的名称
     63     PREPARE stmt FROM @sqlcounts;
     64     -- 25.执行SQL语句
     65     EXECUTE stmt; 
     66     -- 26.释放资源
     67     DEALLOCATE PREPARE stmt;
     68     -- 27.获取动态SQL语句返回值
     69     SET count_date = @count_date;
     70     END
     71 -- 28.定义存储过程结束
     72 &
     73 
     74 
     75 -- 29.如果存在存储过程getColumnInfo则删除
     76 DROP PROCEDURE IF EXISTS `getColumnInfo` &
     77 -- 30.定义存储过程,获取特定数据库表列的信息
     78 -- (传入参数database_name字符串类型,为数据库名;传入参数table_name字符串类型,为表名;传入参数column_name字符串类型,为列名;传入参数column_info字符串类型,列信息;传出参数result_data字符串类型,信息)
     79 CREATE DEFINER=`root`@`localhost` PROCEDURE getColumnInfo(IN database_name CHAR(20), IN table_name CHAR(200), IN column_name CHAR(200), IN column_info CHAR(50), OUT result_data CHAR(20)) 
     80     BEGIN
     81     -- 31.声明变量
     82     DECLARE $sqltext VARCHAR(1000);
     83     -- 32.动态sql,把sql返回值放到@count_date中
     84     SET $sqltext = CONCAT('SELECT t.', column_info,' into @column_info FROM information_schema.COLUMNS t where t.`TABLE_SCHEMA` = '', database_name, '' and t.`TABLE_NAME` = '', table_name, '' and t.`COLUMN_NAME` = '', column_name, '';');
     85     SET @sqlcounts := $sqltext;
     86     -- 33.预编释,stmt预编释变量的名称
     87     PREPARE stmt FROM @sqlcounts;
     88     -- 34.执行SQL语句
     89     EXECUTE stmt; 
     90     -- 35.释放资源
     91     DEALLOCATE PREPARE stmt;
     92     -- 36.获取动态SQL语句返回值
     93     SET result_data = @column_info;
     94     END
     95 -- 37.定义存储过程结束
     96 &
     97 
     98 -- 38.如果存在存储过程comparisonTableExist则删除
     99 DROP PROCEDURE IF EXISTS `comparisonTableExist` &
    100 -- 39.定义存储过程,对比表是否存在
    101 -- (传入参数database_1字符串类型,数据库名1;传入参数database_2字符串类型,数据库名2;传入参数info字符串类型,库表信息)
    102 CREATE DEFINER=`root`@`localhost` PROCEDURE comparisonTableExist(IN database_1 CHAR(20), IN database_2 CHAR(20), OUT info MEDIUMTEXT) 
    103     BEGIN
    104     -- 40.声明变量。database_name查询出来的数据库,table_name查询出来的表名
    105     DECLARE database_name, table_name CHAR(200);
    106     -- this_info表不存在的记录,database_table_no表不存在的记录跳过重复查询
    107     DECLARE this_info, database_table_no MEDIUMTEXT DEFAULT '';
    108     -- database_count_1统计数据库1存在的数量,database_count_2统计数据库2存在的数量,resoult_count统计表存在的数量。如果为0表示不存在
    109     DECLARE database_count_1, database_count_2, resoult_count INT DEFAULT 0;
    110     -- 41.定义游标结束标识,默认为0
    111     DECLARE stopflag INT DEFAULT 0;
    112     -- 42.定义游标,其实就是临时存储sql返回的集合
    113     DECLARE sql_resoult CURSOR FOR SELECT t.TABLE_SCHEMA, t.TABLE_NAME FROM information_schema.COLUMNS t;
    114     -- 43.游标结束就设置为1
    115     DECLARE CONTINUE HANDLER FOR NOT FOUND SET stopflag=1;
    116     -- 44.调用存储过程getdatabaseCount,查看两个数据库是否存在,都存在则继续
    117     CALL getdatabaseCount(database_1, database_count_1);
    118     CALL getdatabaseCount(database_2, database_count_2);
    119     IF (database_count_1 <> 0 AND database_count_2 <> 0) THEN
    120         -- 45.打开游标
    121         OPEN sql_resoult;
    122             -- 46.读取游标中数据,存储到指定变量
    123             FETCH sql_resoult INTO database_name, table_name;
    124             -- 47.没有结束继续往下走
    125             WHILE (stopflag=0) DO
    126                 BEGIN
    127                 -- 48.判断数据库是否为输入的数据库名称1,去除已经比较过数据库2的表不存在
    128                 IF (database_name=database_1 AND INSTR(database_table_no, CONCAT(database_2, '_', table_name)) = 0) THEN
    129                     -- 49.调用存储过程getTableCount,查看表是否存在
    130                     CALL getTableCount(database_2, table_name, resoult_count);
    131                     -- 50.如果数量等于0,那么表不存在
    132                     IF (resoult_count = 0) THEN
    133                         -- 51.把不存在的表记录下来
    134                         IF (this_info IS NULL OR this_info='') THEN
    135                             SET this_info=CONCAT(database_2, '', table_name, '表不存在;
    ');
    136                         ELSE
    137                             SET this_info=CONCAT(this_info, database_2, '', table_name, '表不存在;
    ');
    138                         END IF;
    139                         SET database_table_no=CONCAT(database_table_no, ';', database_2, '_', table_name, ';');
    140                     END IF;
    141                 ELSE
    142                     -- 52.判断数据库是否为输入的数据库名称2,去除已经比较过数据库1的表不存在
    143                     IF (database_name=database_2 AND INSTR(database_table_no, CONCAT(database_1, '_', table_name)) = 0) THEN
    144                         CALL getTableCount(database_1, table_name, resoult_count);
    145                         IF (resoult_count = 0) THEN
    146                             IF (this_info IS NULL OR this_info='') THEN
    147                                 SET this_info=CONCAT(database_1, '', table_name, '表不存在;
    ');
    148                             ELSE
    149                                 SET this_info=CONCAT(this_info, database_1, '', table_name, '表不存在;
    ');
    150                             END IF;
    151                             SET database_table_no=CONCAT(database_table_no, ';', database_1, '_', table_name, ';');
    152                         END IF;
    153                     END IF;
    154                 END IF;
    155                 -- 53.读取游标中数据,存储到指定变量。(和46一样)
    156                 FETCH sql_resoult INTO database_name, table_name;
    157                 END;
    158             END WHILE;
    159         -- 54.关闭游标
    160         CLOSE sql_resoult;
    161     ELSE
    162         IF (database_count_1 = 0 AND database_count_2 = 0) THEN
    163             SET this_info = CONCAT(database_1, '', database_2, '数据库不存在或为空数据库');
    164         ELSE
    165             IF (database_count_1 = 0) THEN
    166                 SET this_info = CONCAT(database_1, '数据库不存在或为空数据库');
    167             ELSE
    168                 SET this_info = CONCAT(database_2, '数据库不存在或为空数据库');
    169             END IF;
    170         END IF;
    171     END IF;
    172     -- 55.把数据放到传出参数
    173     SET info=this_info;
    174     END
    175 -- 56.定义存储过程结束
    176 &
    177 
    178 
    179 -- 57.如果存在存储过程comparisonColumnExist则删除
    180 DROP PROCEDURE IF EXISTS `comparisonColumnExist` &
    181 -- 58.定义存储过程,对比列是否存在
    182 -- (传入参数database_1字符串类型,数据库名1;传入参数database_2字符串类型,数据库名2;传入参数info字符串类型,库表信息)
    183 CREATE DEFINER=`root`@`localhost` PROCEDURE comparisonColumnExist(IN database_1 CHAR(20), IN database_2 CHAR(20), OUT info MEDIUMTEXT) 
    184     BEGIN
    185     -- 59.声明变量。database_name查询出来的数据库,table_name查询出来的表名,column_name查询出来的列名
    186     DECLARE database_name, table_name, column_name CHAR(200);
    187     -- this_info表不存在的记录,database_table_no表不存在的记录跳过重复查询
    188     DECLARE this_info, database_table_no TEXT DEFAULT '';
    189     -- database_count_1统计数据库1存在的数量,database_count_2统计数据库2存在的数量,resoult_count统计表存在的数量。如果为0表示不存在
    190     DECLARE database_count_1, database_count_2, resoult_count INT DEFAULT 0;
    191     -- 60.定义游标结束标识,默认为0
    192     DECLARE stopflag INT DEFAULT 0;
    193     -- 61.定义游标,其实就是临时存储sql返回的集合
    194     DECLARE sql_resoult CURSOR FOR SELECT t.TABLE_SCHEMA, t.TABLE_NAME, t.COLUMN_NAME FROM information_schema.COLUMNS t;
    195     -- 62.游标结束就设置为1
    196     DECLARE CONTINUE HANDLER FOR NOT FOUND SET stopflag=1;
    197     -- 63.调用存储过程getdatabaseCount,查看两个数据库是否存在,都存在则继续(同44)
    198     CALL getdatabaseCount(database_1, database_count_1);
    199     CALL getdatabaseCount(database_2, database_count_2);
    200     IF (database_count_1 <> 0 AND database_count_2 <> 0) THEN
    201         -- 64.打开游标
    202         OPEN sql_resoult;
    203             -- 65.读取游标中数据,存储到指定变量
    204             FETCH sql_resoult INTO database_name, table_name, column_name;
    205             -- 66.没有结束继续往下走
    206             WHILE (stopflag=0) DO
    207                 BEGIN
    208                 -- 67.判断数据库是否为输入的数据库名称1,去除已经比较过数据库2的表不存在(同48)
    209                 IF (database_name=database_1 AND INSTR(database_table_no, CONCAT(database_2, '_', table_name)) = 0) THEN
    210                     -- 68.调用存储过程getTableCount,查看表是否存在(同49)
    211                     CALL getTableCount(database_2, table_name, resoult_count);
    212                     -- 69.如果数量不等于0,则继续
    213                     IF (resoult_count <> 0) THEN
    214                         -- 70.调用存储过程getColumnCount,查看列是否存在。为0说明不存在
    215                         CALL getColumnCount(database_2, table_name, column_name, resoult_count);
    216                         IF (resoult_count = 0) THEN
    217                             IF (this_info IS NULL OR this_info='') THEN
    218                                 SET this_info=CONCAT(database_2, '', table_name, '表的', column_name, '列不存在;
    ');
    219                             ELSE
    220                                 SET this_info=CONCAT(this_info, database_2, '', table_name, '表的', column_name, '列不存在;
    ');
    221                             END IF;
    222                         END IF;
    223                     ELSE
    224                         SET database_table_no=CONCAT(database_table_no, ';', database_2, '_', table_name, ';');
    225                     END IF;
    226                 ELSE
    227                     -- 71.判断数据库是否为输入的数据库名称2,去除已经比较过数据库1的表不存在(同52)
    228                     IF (database_name=database_2 AND INSTR(database_table_no, CONCAT(database_1, '_', table_name)) = 0) THEN
    229                         CALL getTableCount(database_1, table_name, resoult_count);
    230                         IF (resoult_count <> 0) THEN
    231                             CALL getColumnCount(database_1, table_name, column_name, resoult_count);
    232                             IF (resoult_count = 0) THEN
    233                                 IF (this_info IS NULL OR this_info='') THEN
    234                                     SET this_info=CONCAT(database_1, '', table_name, '表的', column_name, '列不存在;
    ');
    235                                 ELSE
    236                                     SET this_info=CONCAT(this_info, database_1, '', table_name, '表的', column_name, '列不存在;
    ');
    237                                 END IF;
    238                             END IF;
    239                         ELSE
    240                             SET database_table_no=CONCAT(database_table_no, ';', database_1, '_', table_name, ';');
    241                         END IF;
    242                     END IF;
    243                 END IF;
    244                 -- 72.读取游标中数据,存储到指定变量。(和65一样)
    245                 FETCH sql_resoult INTO database_name, table_name, column_name;
    246                 END;
    247             END WHILE;
    248         -- 73.关闭游标
    249         CLOSE sql_resoult;
    250     END IF;
    251     -- 74.把数据放到传出参数
    252     SET info=this_info;
    253     END
    254 -- 75.定义存储过程结束
    255 &
    256 
    257 
    258 -- 76.如果存在存储过程comparisonColumnInfo则删除
    259 DROP PROCEDURE IF EXISTS `comparisonColumnInfo` &
    260 -- 77.定义存储过程,对比列的不同
    261 -- (传入参数database_1字符串类型,数据库名1;传入参数database_2字符串类型,数据库名2;传入参数info字符串类型,库表信息)
    262 CREATE DEFINER=`root`@`localhost` PROCEDURE comparisonColumnInfo(IN database_1 CHAR(20), IN database_2 CHAR(20),OUT info MEDIUMTEXT) 
    263     BEGIN
    264     -- 78.声明变量。database_name查询出来的数据库,table_name查询出来的表名,column_name查询出来的列名,collation_name查询出来的具体编码类型
    265     -- result_data_1数据库1的列信息,result_data_2数据库2的列信息,column_info对比的列(现在只比较DATA_TYPE、CHARACTER_SET_NAME)
    266     DECLARE database_name, table_name, column_name, collation_name, result_data_1, result_data_2, column_info CHAR(200);
    267     -- this_info表不存在的记录,database_table_no表不存在的记录跳过重复查询
    268     DECLARE this_info, database_table_no MEDIUMTEXT DEFAULT '';
    269     -- database_count_1统计数据库1存在的数量,database_count_2统计数据库2存在的数量,resoult_count统计表存在的数量。如果为0表示不存在
    270     DECLARE database_count_1, database_count_2, resoult_count INT DEFAULT 0;
    271     -- 79.定义游标结束标识,默认为0
    272     DECLARE stopflag INT DEFAULT 0;
    273     -- 80.定义游标,其实就是临时存储sql返回的集合
    274     DECLARE sql_resoult CURSOR FOR SELECT t.TABLE_SCHEMA, t.TABLE_NAME, t.COLUMN_NAME, t.COLLATION_NAME FROM information_schema.COLUMNS t;
    275     -- 81.游标结束就设置为1
    276     DECLARE CONTINUE HANDLER FOR NOT FOUND SET stopflag=1;
    277     -- 82.调用存储过程getdatabaseCount,查看两个数据库是否存在,都存在则继续(同63)
    278     CALL getdatabaseCount(database_1, database_count_1);
    279     CALL getdatabaseCount(database_2, database_count_2);
    280     IF (database_count_1 <> 0 AND database_count_2 <> 0) THEN
    281         -- 83.打开游标
    282         OPEN sql_resoult;
    283             -- 84.读取游标中数据,存储到指定变量
    284             FETCH sql_resoult INTO database_name, table_name, column_name, collation_name;
    285             -- 85.没有结束继续往下走
    286             WHILE (stopflag=0) DO
    287                 BEGIN
    288                 -- 86.判断数据库是否为输入的数据库名称1,去除已经比较过数据库2的表不存在(同67)
    289                 IF (database_name=database_1 AND INSTR(database_table_no, CONCAT(database_2, '_', table_name)) = 0) THEN
    290                     -- 87.调用存储过程getTableCount,查看表是否存在(同68)
    291                     CALL getTableCount(database_2, table_name, resoult_count);
    292                     -- 88.如果数量不等于0,则继续
    293                     IF (resoult_count <> 0) THEN
    294                         -- 89.调用存储过程getColumnCount,查看列是否存在。为0说明不存在(同70)
    295                         CALL getColumnCount(database_2, table_name, column_name, resoult_count);
    296                         IF (resoult_count <> 0) THEN
    297                             -- 90.对比DATA_TYPE是否相同
    298                             SET column_info = 'DATA_TYPE';
    299                             CALL getColumnInfo(database_1, table_name, column_name, column_info, result_data_1);
    300                             CALL getColumnInfo(database_2, table_name, column_name, column_info, result_data_2);
    301                             IF (result_data_1 <> result_data_2) THEN
    302                                 IF (this_info IS NULL OR this_info='') THEN
    303                                     SET this_info=CONCAT(table_name, '表的', column_name, '列的', column_info, '不一样;
    ');
    304                                 ELSE
    305                                     SET this_info=CONCAT(this_info, table_name, '表的', column_name, '列的', column_info, '不一样;
    ');
    306                                 END IF;
    307                             END IF;
    308                             -- 91.对比CHARACTER_SET_NAME是否相同
    309                             SET column_info = 'CHARACTER_SET_NAME';
    310                             CALL getColumnInfo(database_1, table_name, column_name, column_info, result_data_1);
    311                             CALL getColumnInfo(database_2, table_name, column_name, column_info, result_data_2);
    312                             IF (result_data_1 <> result_data_2) THEN
    313                                 IF (this_info IS NULL OR this_info='') THEN
    314                                     SET this_info=CONCAT(table_name, '表的', column_name, '列的', column_info, '不一样;
    ');
    315                                 ELSE
    316                                     SET this_info=CONCAT(this_info, table_name, '表的', column_name, '列的', column_info, '不一样;
    ');
    317                                 END IF;
    318                             END IF;
    319                         END IF;
    320                     ELSE
    321                         SET database_table_no=CONCAT(database_table_no, ';', database_2, '_', table_name, ';');
    322                     END IF;
    323                 ELSE
    324                     IF (database_name=database_2 AND INSTR(database_table_no, CONCAT(database_1, '_', table_name)) = 0) THEN
    325                         CALL getTableCount(database_1, table_name, resoult_count);
    326                         IF (resoult_count = 0) THEN
    327                             SET database_table_no=CONCAT(database_table_no, ';', database_1, '_', table_name, ';');
    328                         END IF;
    329                     END IF;
    330                 END IF;
    331                 -- 92.读取游标中数据,存储到指定变量。(和84一样)
    332                 FETCH sql_resoult INTO database_name, table_name, column_name, collation_name;
    333                 END;
    334             END WHILE;
    335         -- 93.关闭游标
    336         CLOSE sql_resoult;
    337     END IF;
    338     -- 94.把数据放到传出参数
    339     SET info=this_info;
    340     END
    341 -- 95.定义存储过程结束
    342 &
    343 -- 96.将mysql分隔符从&设置为;
    344 DELIMITER ;
    345 -- 97.设置变量
    346 SET @database_1='my_test1';
    347 SET @database_2='my_test2';
    348 SET @tableExistInfo='';
    349 SET @columnExistInfo='';
    350 SET @columnInfo='';
    351 -- 98.调用存储过程
    352 CALL comparisonTableExist(@database_1, @database_2, @tableExistInfo);
    353 CALL comparisonColumnExist(@database_1, @database_2, @columnExistInfo);
    354 CALL comparisonColumnInfo(@database_1, @database_2, @columnInfo);
    355 SET @info=CONCAT(@tableExistInfo, '
    ', @columnExistInfo, '
    ', @columnInfo);
    356 -- 99.打印
    357 SELECT @info;
    358 -- 100.如果存在存储过程则删除
    359 DROP PROCEDURE IF EXISTS `comparisonColumnInfo`;
    360 DROP PROCEDURE IF EXISTS `comparisonColumnExist`;
    361 DROP PROCEDURE IF EXISTS `comparisonTableExist`;
    362 DROP PROCEDURE IF EXISTS `getColumnInfo`;
    363 DROP PROCEDURE IF EXISTS `getColumnCount`;
    364 DROP PROCEDURE IF EXISTS `getTableCount`;
    365 DROP PROCEDURE IF EXISTS `getdatabaseCount`;

    3、无注释

      1 DELIMITER &
      2 
      3 DROP PROCEDURE IF EXISTS `getdatabaseCount` &
      4 CREATE DEFINER=`root`@`localhost` PROCEDURE getdatabaseCount(IN database_name CHAR(20), OUT count_date INT) 
      5     BEGIN
      6     DECLARE $sqltext VARCHAR(1000);
      7     SET $sqltext = CONCAT('SELECT COUNT(*) into @count_date FROM information_schema.COLUMNS t where t.`TABLE_SCHEMA` = '', database_name, '';');
      8     SET @sqlcounts := $sqltext;
      9     PREPARE stmt FROM @sqlcounts;
     10     EXECUTE stmt;
     11     DEALLOCATE PREPARE stmt;
     12     SET count_date = @count_date;
     13     END
     14 &
     15 
     16 DROP PROCEDURE IF EXISTS `getTableCount` &
     17 CREATE DEFINER=`root`@`localhost` PROCEDURE getTableCount(IN database_name CHAR(20), IN table_name CHAR(200), OUT count_date INT) 
     18     BEGIN
     19     DECLARE $sqltext VARCHAR(1000);
     20     SET $sqltext = CONCAT('SELECT COUNT(*) into @count_date FROM information_schema.COLUMNS t where t.`TABLE_SCHEMA` = '', database_name, '' and t.`TABLE_NAME` = '', table_name, '';');
     21     SET @sqlcounts := $sqltext;
     22     PREPARE stmt FROM @sqlcounts;
     23     EXECUTE stmt;
     24     DEALLOCATE PREPARE stmt;
     25     SET count_date = @count_date;
     26     END
     27 &
     28 
     29 
     30 DROP PROCEDURE IF EXISTS `getColumnCount` &
     31 CREATE DEFINER=`root`@`localhost` PROCEDURE getColumnCount(IN database_name CHAR(20), IN table_name CHAR(200), IN column_name CHAR(200), OUT count_date INT) 
     32     BEGIN
     33     DECLARE $sqltext VARCHAR(1000);
     34     SET $sqltext = CONCAT('SELECT COUNT(*) into @count_date FROM information_schema.COLUMNS t where t.`TABLE_SCHEMA` = '', database_name, '' and t.`TABLE_NAME` = '', table_name, '' and t.`COLUMN_NAME` = '', column_name, '';');
     35     SET @sqlcounts := $sqltext;
     36     PREPARE stmt FROM @sqlcounts;
     37     EXECUTE stmt; 
     38     DEALLOCATE PREPARE stmt;
     39     SET count_date = @count_date;
     40     END
     41 &
     42 
     43 
     44 DROP PROCEDURE IF EXISTS `getColumnInfo` &
     45 CREATE DEFINER=`root`@`localhost` PROCEDURE getColumnInfo(IN database_name CHAR(20), IN table_name CHAR(200), IN column_name CHAR(200), IN column_info CHAR(50), OUT result_data CHAR(20)) 
     46     BEGIN
     47     DECLARE $sqltext VARCHAR(1000);
     48     SET $sqltext = CONCAT('SELECT t.', column_info,' into @column_info FROM information_schema.COLUMNS t where t.`TABLE_SCHEMA` = '', database_name, '' and t.`TABLE_NAME` = '', table_name, '' and t.`COLUMN_NAME` = '', column_name, '';');
     49     SET @sqlcounts := $sqltext;
     50     PREPARE stmt FROM @sqlcounts;
     51     EXECUTE stmt;
     52     DEALLOCATE PREPARE stmt;
     53     SET result_data = @column_info;
     54     END
     55 &
     56 
     57 DROP PROCEDURE IF EXISTS `comparisonTableExist` &
     58 CREATE DEFINER=`root`@`localhost` PROCEDURE comparisonTableExist(IN database_1 CHAR(20), IN database_2 CHAR(20), OUT info MEDIUMTEXT) 
     59     BEGIN
     60     DECLARE database_name, table_name CHAR(200);
     61     DECLARE this_info, database_table_no MEDIUMTEXT DEFAULT '';
     62     DECLARE database_count_1, database_count_2, resoult_count INT DEFAULT 0;
     63     DECLARE stopflag INT DEFAULT 0;
     64     DECLARE sql_resoult CURSOR FOR SELECT t.TABLE_SCHEMA, t.TABLE_NAME FROM information_schema.COLUMNS t;
     65     DECLARE CONTINUE HANDLER FOR NOT FOUND SET stopflag=1;
     66     CALL getdatabaseCount(database_1, database_count_1);
     67     CALL getdatabaseCount(database_2, database_count_2);
     68     IF (database_count_1 <> 0 AND database_count_2 <> 0) THEN
     69         OPEN sql_resoult;
     70             FETCH sql_resoult INTO database_name, table_name;
     71             WHILE (stopflag=0) DO
     72                 BEGIN
     73                 IF (database_name=database_1 AND INSTR(database_table_no, CONCAT(database_2, '_', table_name)) = 0) THEN
     74                     CALL getTableCount(database_2, table_name, resoult_count);
     75                     IF (resoult_count = 0) THEN
     76                         IF (this_info IS NULL OR this_info='') THEN
     77                             SET this_info=CONCAT(database_2, '', table_name, '表不存在;
    ');
     78                         ELSE
     79                             SET this_info=CONCAT(this_info, database_2, '', table_name, '表不存在;
    ');
     80                         END IF;
     81                         SET database_table_no=CONCAT(database_table_no, ';', database_2, '_', table_name, ';');
     82                     END IF;
     83                 ELSE
     84                     IF (database_name=database_2 AND INSTR(database_table_no, CONCAT(database_1, '_', table_name)) = 0) THEN
     85                         CALL getTableCount(database_1, table_name, resoult_count);
     86                         IF (resoult_count = 0) THEN
     87                             IF (this_info IS NULL OR this_info='') THEN
     88                                 SET this_info=CONCAT(database_1, '', table_name, '表不存在;
    ');
     89                             ELSE
     90                                 SET this_info=CONCAT(this_info, database_1, '', table_name, '表不存在;
    ');
     91                             END IF;
     92                             SET database_table_no=CONCAT(database_table_no, ';', database_1, '_', table_name, ';');
     93                         END IF;
     94                     END IF;
     95                 END IF;
     96                 FETCH sql_resoult INTO database_name, table_name;
     97                 END;
     98             END WHILE;
     99         CLOSE sql_resoult;
    100     ELSE
    101         IF (database_count_1 = 0 AND database_count_2 = 0) THEN
    102             SET this_info = CONCAT(database_1, '', database_2, '数据库不存在或为空数据库');
    103         ELSE
    104             IF (database_count_1 = 0) THEN
    105                 SET this_info = CONCAT(database_1, '数据库不存在或为空数据库');
    106             ELSE
    107                 SET this_info = CONCAT(database_2, '数据库不存在或为空数据库');
    108             END IF;
    109         END IF;
    110     END IF;
    111     SET info=this_info;
    112     END
    113 &
    114 
    115 
    116 DROP PROCEDURE IF EXISTS `comparisonColumnExist` &
    117 CREATE DEFINER=`root`@`localhost` PROCEDURE comparisonColumnExist(IN database_1 CHAR(20), IN database_2 CHAR(20), OUT info MEDIUMTEXT) 
    118     BEGIN
    119     DECLARE database_name, table_name, column_name CHAR(200);
    120     DECLARE this_info, database_table_no TEXT DEFAULT '';
    121     DECLARE database_count_1, database_count_2, resoult_count INT DEFAULT 0;
    122     DECLARE stopflag INT DEFAULT 0;
    123     DECLARE sql_resoult CURSOR FOR SELECT t.TABLE_SCHEMA, t.TABLE_NAME, t.COLUMN_NAME FROM information_schema.COLUMNS t;
    124     DECLARE CONTINUE HANDLER FOR NOT FOUND SET stopflag=1;
    125     CALL getdatabaseCount(database_1, database_count_1);
    126     CALL getdatabaseCount(database_2, database_count_2);
    127     IF (database_count_1 <> 0 AND database_count_2 <> 0) THEN
    128         OPEN sql_resoult;
    129             FETCH sql_resoult INTO database_name, table_name, column_name;
    130             WHILE (stopflag=0) DO
    131                 BEGIN
    132                 IF (database_name=database_1 AND INSTR(database_table_no, CONCAT(database_2, '_', table_name)) = 0) THEN
    133                     CALL getTableCount(database_2, table_name, resoult_count);
    134                     IF (resoult_count <> 0) THEN
    135                         CALL getColumnCount(database_2, table_name, column_name, resoult_count);
    136                         IF (resoult_count = 0) THEN
    137                             IF (this_info IS NULL OR this_info='') THEN
    138                                 SET this_info=CONCAT(database_2, '', table_name, '表的', column_name, '列不存在;
    ');
    139                             ELSE
    140                                 SET this_info=CONCAT(this_info, database_2, '', table_name, '表的', column_name, '列不存在;
    ');
    141                             END IF;
    142                         END IF;
    143                     ELSE
    144                         SET database_table_no=CONCAT(database_table_no, ';', database_2, '_', table_name, ';');
    145                     END IF;
    146                 ELSE
    147                     IF (database_name=database_2 AND INSTR(database_table_no, CONCAT(database_1, '_', table_name)) = 0) THEN
    148                         CALL getTableCount(database_1, table_name, resoult_count);
    149                         IF (resoult_count <> 0) THEN
    150                             CALL getColumnCount(database_1, table_name, column_name, resoult_count);
    151                             IF (resoult_count = 0) THEN
    152                                 IF (this_info IS NULL OR this_info='') THEN
    153                                     SET this_info=CONCAT(database_1, '', table_name, '表的', column_name, '列不存在;
    ');
    154                                 ELSE
    155                                     SET this_info=CONCAT(this_info, database_1, '', table_name, '表的', column_name, '列不存在;
    ');
    156                                 END IF;
    157                             END IF;
    158                         ELSE
    159                             SET database_table_no=CONCAT(database_table_no, ';', database_1, '_', table_name, ';');
    160                         END IF;
    161                     END IF;
    162                 END IF;
    163                 FETCH sql_resoult INTO database_name, table_name, column_name;
    164                 END;
    165             END WHILE;
    166         CLOSE sql_resoult;
    167     END IF;
    168     SET info=this_info;
    169     END
    170 &
    171 
    172 
    173 DROP PROCEDURE IF EXISTS `comparisonColumnInfo` &
    174 CREATE DEFINER=`root`@`localhost` PROCEDURE comparisonColumnInfo(IN database_1 CHAR(20), IN database_2 CHAR(20),OUT info MEDIUMTEXT) 
    175     BEGIN
    176     DECLARE database_name, table_name, column_name, collation_name, result_data_1, result_data_2, column_info CHAR(200);
    177     DECLARE this_info, database_table_no MEDIUMTEXT DEFAULT '';
    178     DECLARE database_count_1, database_count_2, resoult_count INT DEFAULT 0;
    179     DECLARE stopflag INT DEFAULT 0;
    180     DECLARE sql_resoult CURSOR FOR SELECT t.TABLE_SCHEMA, t.TABLE_NAME, t.COLUMN_NAME, t.COLLATION_NAME FROM information_schema.COLUMNS t;
    181     DECLARE CONTINUE HANDLER FOR NOT FOUND SET stopflag=1;
    182     CALL getdatabaseCount(database_1, database_count_1);
    183     CALL getdatabaseCount(database_2, database_count_2);
    184     IF (database_count_1 <> 0 AND database_count_2 <> 0) THEN
    185         OPEN sql_resoult;
    186             FETCH sql_resoult INTO database_name, table_name, column_name, collation_name;
    187             WHILE (stopflag=0) DO
    188                 BEGIN
    189                 IF (database_name=database_1 AND INSTR(database_table_no, CONCAT(database_2, '_', table_name)) = 0) THEN
    190                     CALL getTableCount(database_2, table_name, resoult_count);
    191                     IF (resoult_count <> 0) THEN
    192                         CALL getColumnCount(database_2, table_name, column_name, resoult_count);
    193                         IF (resoult_count <> 0) THEN
    194                             SET column_info = 'DATA_TYPE';
    195                             CALL getColumnInfo(database_1, table_name, column_name, column_info, result_data_1);
    196                             CALL getColumnInfo(database_2, table_name, column_name, column_info, result_data_2);
    197                             IF (result_data_1 <> result_data_2) THEN
    198                                 IF (this_info IS NULL OR this_info='') THEN
    199                                     SET this_info=CONCAT(table_name, '表的', column_name, '列的', column_info, '不一样;
    ');
    200                                 ELSE
    201                                     SET this_info=CONCAT(this_info, table_name, '表的', column_name, '列的', column_info, '不一样;
    ');
    202                                 END IF;
    203                             END IF;
    204                             SET column_info = 'CHARACTER_SET_NAME';
    205                             CALL getColumnInfo(database_1, table_name, column_name, column_info, result_data_1);
    206                             CALL getColumnInfo(database_2, table_name, column_name, column_info, result_data_2);
    207                             IF (result_data_1 <> result_data_2) THEN
    208                                 IF (this_info IS NULL OR this_info='') THEN
    209                                     SET this_info=CONCAT(table_name, '表的', column_name, '列的', column_info, '不一样;
    ');
    210                                 ELSE
    211                                     SET this_info=CONCAT(this_info, table_name, '表的', column_name, '列的', column_info, '不一样;
    ');
    212                                 END IF;
    213                             END IF;
    214                         END IF;
    215                     ELSE
    216                         SET database_table_no=CONCAT(database_table_no, ';', database_2, '_', table_name, ';');
    217                     END IF;
    218                 ELSE
    219                     IF (database_name=database_2 AND INSTR(database_table_no, CONCAT(database_1, '_', table_name)) = 0) THEN
    220                         CALL getTableCount(database_1, table_name, resoult_count);
    221                         IF (resoult_count = 0) THEN
    222                             SET database_table_no=CONCAT(database_table_no, ';', database_1, '_', table_name, ';');
    223                         END IF;
    224                     END IF;
    225                 END IF;
    226                 FETCH sql_resoult INTO database_name, table_name, column_name, collation_name;
    227                 END;
    228             END WHILE;
    229         CLOSE sql_resoult;
    230     END IF;
    231     SET info=this_info;
    232     END
    233 &
    234 DELIMITER ;
    235 SET @database_1='my_test3';
    236 SET @database_2='my_test4';
    237 SET @tableExistInfo='';
    238 SET @columnExistInfo='';
    239 SET @columnInfo='';
    240 CALL comparisonTableExist(@database_1, @database_2, @tableExistInfo);
    241 CALL comparisonColumnExist(@database_1, @database_2, @columnExistInfo);
    242 CALL comparisonColumnInfo(@database_1, @database_2, @columnInfo);
    243 SET @info=CONCAT(@tableExistInfo, '
    ', @columnExistInfo, '
    ', @columnInfo);
    244 SELECT @info;
    245 DROP PROCEDURE IF EXISTS `comparisonColumnInfo`;
    246 DROP PROCEDURE IF EXISTS `comparisonColumnExist`;
    247 DROP PROCEDURE IF EXISTS `comparisonTableExist`;
    248 DROP PROCEDURE IF EXISTS `getColumnInfo`;
    249 DROP PROCEDURE IF EXISTS `getColumnCount`;
    250 DROP PROCEDURE IF EXISTS `getTableCount`;
    251 DROP PROCEDURE IF EXISTS `getdatabaseCount`;
  • 相关阅读:
    Linux常用命令,touch命令,vi和vim命令,文件查看命令,文本处理命令,备份压缩命令,网络与磁盘命令,软件安装命令
    Linux命令整理,用户管理命令,用户组管理命令,系统管理命令,目录管理常用命令
    单元测试基本步骤?单元测试三个常用注解?日志体系结构和log4j,Log4j三个核心?
    cookies,sessionStorage 和 localStorage 之间有什么区别?
    filter() 、find()、findIndex()
    设置多行文本隐藏显示省略号时样式丢失了
    react 中封装一个简单的滚动条组件
    react-router-cache-router
    浅谈React 中 Component与PureComponent如何使用
    React.Fragment
  • 原文地址:https://www.cnblogs.com/xiaostudy/p/12417151.html
Copyright © 2011-2022 走看看