mysql 数据库名称长度_MySql数据库表信息查询(表名称,注释,类型,类型长度)...

这篇博客详细介绍了如何通过SQL查询从MySQL的information_schema.COLUMNS获取表字段的详细信息,包括字段名称、数据类型、长度等。作者在文中分享了在处理不同数据类型时遇到的问题,如smallint、tinyint等,并给出了逐步改进的查询语句,以应对无符号和特殊类型字段的长度提取,最终提供了一种可行的解决方案。
摘要由CSDN通过智能技术生成

首先自己文笔不好。就不写口水话了。

第一点:先了解下面这句代码

select  * from information_schema.`COLUMNS` t1 where TABLE_SCHEMA=database() and TABLE_NAME = 'hotelroomlist' //hotelroomlist表名称

查询当前表所有属性,运行结果为很多内容。我在下面只显示最关键的内容。其他的自己运行可以看看db55d0c7f461bcbf760980ac0beb6ef8.png可以看到,很多能显示的都显示出来了。但是我在使用中必须把字段类型长度分别取出 比如:下图效果825aca1e5872786f20f57200661233bc.png

(这个是最终效果)

所以上面查询数据库属性基本都都有。但是特殊类型(smallint,tinyint等等)都不能显示出长度。CHARACTER_MAXIMUM_LENGTH 这个属性就不能完全获取出就要对上面一句进行处理。

第一次写了以下内容

select ORDINAL_POSITION f_number, COLUMN_NAME f_column, DATA_TYPE f_datatype, if(CHARACTER_MAXIMUM_LENGTH is null,if(LOCATE('int',column_type)>0,REPLACE(REPLACE(column_type,'int(',''),')',''),0),CHARACTER_MAXIMUM_LENGTH) f_length, '' f_identity, IF(COLUMN_KEY='PRI','1','') f_key,IF(IS_NULLABLE='YES','1','') f_isnullable,COLUMN_DEFAULT f_default,case when COLUMN_COMMENT='' then COLUMN_NAME else COLUMN_COMMENT END f_remark from (

select * from information_schema.`COLUMNS` t1 where TABLE_SCHEMA=database() and TABLE_NAME ='hotelroomlist'

) t2 order by f_number

查询出来效果不太理想,但数据库中只是varchar int 类型的那么上面代码完全实用只是 像smallint这样的类型的无法分解出来

cdbc667305e3586fe8c1f82e6b659cfc.png

于是做了一个修改

select ORDINAL_POSITION number, COLUMN_NAME f_column, DATA_TYPE datatype, case WHEN CHARACTER_MAXIMUM_LENGTH is null

then ( case

WHEN LOCATE('smallint',column_type)>0

then REPLACE(REPLACE(column_type,'smallint(',''),')','')WHEN LOCATE('tinyint',column_type)>0

then REPLACE(REPLACE(column_type,'tinyint(',''),')','')WHEN LOCATE('bigint',column_type)>0

then REPLACE(REPLACE(column_type,'bigint(',''),')','')WHEN LOCATE('int',column_type)>0

then REPLACE(REPLACE(column_type,'int(',''),')','')else 0

END)elseCHARACTER_MAXIMUM_LENGTHEND length , '' identity, IF(COLUMN_KEY='PRI','1','') f_key,IF(IS_NULLABLE='YES','1','') isnullable,COLUMN_DEFAULT f_defaults,case when COLUMN_COMMENT='' then COLUMN_NAME else COLUMN_COMMENT END remark from(select * from information_schema.`COLUMNS` t1 where TABLE_SCHEMA=database() and TABLE_NAME ='hotelroomlist') t2order by number

又花了N个小时后修改成上面内容。本来感觉很好了。可是又遇到问题。在数据库中需要设置“无符号” 的东西,这个在数据库中比较常用。使用上面的一句类型后面会跟一个unsigned的标识所以还是不太满意

1eea0a5f526d0f20912878c3db946178.png

没办法又重新来过。又花了半小时想到用截取的方式来解决,于是下面是最终代码

select ORDINAL_POSITION number, COLUMN_NAME f_column, DATA_TYPE datatype,column_type type, case WHEN CHARACTER_MAXIMUM_LENGTH is null

then ( case

WHEN LOCATE('smallint',column_type)>0

then SUBSTRING(column_type FROM 10 FOR 1)WHEN LOCATE('tinyint',column_type)>0

then SUBSTRING(column_type FROM 9 FOR 1)WHEN LOCATE('bigint',column_type)>0

then SUBSTRING(column_type FROM 8 FOR 1)WHEN LOCATE('int',column_type)>0

then SUBSTRING(column_type FROM 5 FOR 1)else 0

END)elseCHARACTER_MAXIMUM_LENGTHEND length , '' identity, IF(COLUMN_KEY='PRI','1','') f_key,IF(IS_NULLABLE='YES','1','') isnullable,COLUMN_DEFAULT f_defaults,case when COLUMN_COMMENT='' then COLUMN_NAME else COLUMN_COMMENT END remark from(select * from information_schema.`COLUMNS` t1 where TABLE_SCHEMA=database() and TABLE_NAME = 'hotelroomlist') t2order by number

效果如下:

241cd18635e61204889a876ab304642d.png

就为了把列类型中的长度单独提出来用了1天多时间。所以别嫌弃我前面给了一些感觉无用的东西。但是每个代码其实都可以可以使用只是只要别遇到特殊的字段类型就可以的

写出来是感觉网上,我一直没找到相关的内容,所以也为大家分享一下,免得花时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值