查找数据库中的所有字段的信息

到此,我们只剩下一个索引没有解决
以上数据我们都找到了,接下来就是写SQL让他们合并在一起
selectic.table_schema '数据库名',ic.table_name '表名',ic.column_name '列名',ic.data_type '字段类型',case ic.column_keywhen 'PRI' then'是'else '否'end '是否主键',IF(ist.column_name = ic.column_name,'是','否') '是否索引',ic.column_commentfrom information_schema.columnsic -- 字段表left joininformation_schema.statistics ist-- 索引on (ic.table_schema = ist.table_schemaandic.table_name = ist.table_name)
解决方案
MySQL相对来说简单的原因是他是可视化操作,而我们需要输入命令来查找系统表
select * from user_tab_columns --这条语句可以找出类似于MySQL中columns的表
这里有一个注意点(中的user)
这样我们可以获得表名、字段名、数据类型(这边没有获取数据库名是因为我们实际过程中当前用户只能访问一个数据库并且我们平时用的也是该数据库,所以数据库名另外加上即可)
select * fromuser_cons_columns
这一块代表的是约束信息,这里1234显示的应该是顺序,而我观察了我这边的数据库可以得到‘1’是主键
接下来我们需要查找索引,使用以下语句
select * from user_IND_COLUMNS
可以通过外连接将其显示
到此为止我们只剩下一个备注还没有搞定,通过下面这条语句可以找到字段对应的备注信息
select * from user_col_comments

查找数据库中的所有字段的信息

文章插图
至此我们已经找到了所有需要的数据,接下来只需执行sql语句拼接即可
selectdtc.table_name table_name,dtc.column_name column_name,dtc.data_type column_type,CASE ucc.positionWHEN 1 THEN'是'ELSE'否'END iskey,CASEWHEN uic.COLUMN_POSITION is null THEN'否'ELSE'是'END isindex,utc.COMMENTSfrom(select * from user_tab_columns) dtcLEFT JOIN(select *fromuser_cons_columns colWHERE col.POSITION = 1) uccon (dtc.table_name = ucc.table_name and dtc.column_name = ucc.column_name)LEFT JOIN (select * from user_IND_COLUMNS) uicon (dtc.table_name = uic.table_name and dtc.column_name = uic.column_name)LEFT JOIN(select * from user_col_comments) utcon(dtc.table_name = utc.table_name and dtc.column_name = utc.column_name)ORDER BYdtc.table_name
SQL 解决方案
说来惭愧,小黄至今都还未解决SQL 中索引和备注的信息,主要原因是查找到了索引但不知道如何将两张表连接在一起 。在这里小黄也希望各位大佬来帮我诊断一下以上是否有错误,以及帮我补充一下SQL 的解决方案 。
select* from INFORMATION_SCHEMA.COLUMNS --这条语句作为我们的主表,其他的表进行外连接
查找字段是否为主键
select*from INFORMATION_SCHEMA.KEY_COLUMN_USAGE
SQL 我的部分解决方案
select tsc.table_catalog,tsc.table_name,tsc.column_name,tsc.data_type,CASE WHEN iskc.ordinal_position is null THEN '否'ELSE '是'END iskeyfrom INFORMATION_SCHEMA.COLUMNS tscleft join(select*from INFORMATION_SCHEMA.KEY_COLUMN_USAGE) iskcon (tsc.column_name = iskc.column_name and tsc.table_name = iskc.table_name)order by table_name
2021.8.9更新