mysql存储过程数据库⽐对_【草稿整理】【mysql】两个数据
库结构对⽐
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预编释变量的名称
bool函数怎么用python16 PREPARE stmt FROM @sqlcounts;17 --7.执⾏SQL语句
18 EXECUTEstmt;19 --8.释放资源
20 DEALLOCATE PREPAREstmt;21 --9.获取动态SQL语句返回值weight的搭配
22 SET count_date = @count_date;23 END
24 --10.定义存储过程结束
25 &
26
27 --11.如果存在存储过程getTableCount则删除
28 DROP PROCEDURE IF EXISTS `getTableCount` &
mysql查看所有存储过程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 EXECUTEstmt;42 --17.释放资源
43 DEALLOCATE PREPAREstmt;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 EXECUTEstmt;66 --26.释放资源
67 DEALLOCATE PREPAREstmt;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 EXECUTEstmt;90 --35.释放资源
91 DEALLOCATE PREPAREstmt;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 FROMinformation_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 OPENsql_resoult;122 --46.读取游标中数据,存储到指定变量
123 FETCH sql_resoult INTOdatabase_name, table_name;124 --47.没有结束继续往下⾛
125 WHILE (stopflag=0) DO126 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, '表不存在;\n');136 ELSE
137 SET this_info=CONCAT(this_info, database_2, '的', table_name, '表不存在;\n');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, '表不存在;\n');148 ELSE
149 SET this_info=CONCAT(this_info, database_1, '的', table_name, '表不存在;\n');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 INTOdatabase_name, table_name;157 END;158 END WHILE;159 --54.关闭游标
160 CLOSEsql_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
FROMinformation_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 OPENsql_resoult;203 --65.读取游标中数据,存储到指定变量
204 FETCH sql_resoult INTOdatabase_name, table_name, column_name;205 --66.没有结束继续往下⾛
206 WHILE (stopflag=0) DO207 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, '列不存在;\n');219 ELSE
220 SET this_info=CONCAT(this_info, database_2, '的', table_name, '表的', column_name, '列不存在;\n');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, '列不存在;\n');235 ELSE
236 SET this_info=CONCAT(this_info, database_1, '的', table_name, '表的', column_name, '列不存在;\n');237 END IF;238 END IF;239 ELSE

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。