mysql - 关于数据库中系统metadata方法的问题

查看:164
本文介绍了mysql - 关于数据库中系统metadata方法的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

使用metadata方法,如INFORMATION_SCHEMA.COLUMNS, INFORMATION_SCHEMA.TABLE这种,初学metadata方法,这里不太理解, 并且对于mysql不能用with方法不知道怎么解决,如何用一个语句选出的结果在另一个语句中进行from操作?临时表如何搭建?

CUSTOMER(cid,cname,ccity,cstate,cphone)
RESTAURANT(rid,rname,rcity,rstate)
MENUITEM(rid,itemname,price)
ORDER(oid,cid,rid,ordertime,deliverytime,totalprice,deliveryfee)
ORDERDETAIL(oid,rid,itemname,quantity)

列出拥有最多attributes的table
列出attribute类型为int的attribute名及其table名
列出拥有相同attribute和相同数据类型的两个表

解决方案

mysql不支持with,临时表语法可以百度,用一个语句选出的结果在另一个语句中进行from操作你是说insert into select么 oracle也有的嘛 临时数据可以直接用insert into tbl select * from dual插入临时表 方法笨了点还是可以实现的
列出拥有最多attributes的table和列出attribute类型为int的attribute名及其table名在INFORMATION_SCHEMA.COLUMNS中有table_schema,table_name,column_name,data_type,你按需要取值就可以了
最后一个问题可以稍微处理一下数据筛选,比如select group_concat(table_name) from (select table_name,group_concat(table_columns) table_atrs from (select table_name,concat(column_name,data_type,ifnull(CHARACTER_MAXIMUM_LENGTH,'')) table_columns from INFORMATION_SCHEMA.COLUMNS order by table_name,column_name) tbl group by table_name ) aaa group by table_atrs having count(1)>1;整理了一下,这个sql可以找出你要的结果,相同结构的表名以逗号连接展示出来(不包括索引结构)

这篇关于mysql - 关于数据库中系统metadata方法的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆