当前位置: 代码网 > it编程>数据库>Mysql > Mysql快速列出来所有列信息实现思路

Mysql快速列出来所有列信息实现思路

2025年01月24日 Mysql 我要评论
需求描述如何将mysql数据库中指定表【tb_order】的所有字段都展示出来,以备注中的中文名为列名。实现思路最终展示效果,即拼接出可执行执行的sql,如下图所示。建表语句如下所示。create t

需求描述

如何将mysql数据库中指定表【tb_order】的所有字段都展示出来,以备注中的中文名为列名。

实现思路

最终展示效果,即拼接出可执行执行的sql,如下图所示。

建表语句如下所示。

create table `tb_order` (
  `id` bigint(20) not null auto_increment comment '订单id',
  `user_id` bigint(20) not null comment '用户id:长度20位',
  `name` varchar(100) default null comment '商品名称',
  `pay_amount` bigint(20) not null comment '商品价格:单位分',
  `order_status` varchar(8) default null comment '订单状态',
  `num` bigint(10) default '0' comment '商品数量',
  `data_info` varchar(255) default null comment '订单信息',
  `is_enable` varchar(10) default null comment '是否有效:1-有效',
  `created_user` varchar(20) default null comment '创建人',
  `created_time` datetime default null on update current_timestamp comment '创建时间',
  primary key (`id`) using btree,
  key `indx_user_id` (`user_id`) using btree
) engine=innodb default charset=utf8 row_format=compact;

实现思路,即主要解决以下几个问题

1、如何查表信息

可以从 数据库系统表information_schema的 columns 中取目标表的信息。

select
	ordinal_position,
	column_name,
	data_type,
	column_comment
from
	information_schema. columns
where
	table_name = 'tb_order';

执行sql查询结果如下所示。

2、如何取字段描述信息

列备注的字段描述中有【冒号: 】,如何只取冒号前的内容,可 使用substring_index函数。

格式:substring_index(str, delimiter, number)
str 目标字符串
delimiter 截取的分隔符
number 表示出现的位置
即 返回从字符串str的第number个出现的分隔符delimiter之前的子串

对于本需求,截取冒号前的字符串,可使用 substring_index(column_comment, ‘:’, 1)。

select
	ordinal_position,
	column_name,
	data_type,
	column_comment,
	substring_index(column_comment, ':', 1) as columncomment
from
	information_schema. columns
where
	table_name = 'tb_order';

执行以上sql,结果如下所示。

3、如何将列信息一行展示

将列的信息在一行显示,可 使用group_concat函数

select
	ordinal_position,
	column_name,
	data_type,
	column_comment,
	group_concat(substring_index(column_comment, ':', 1)) as columncomment
from
	information_schema. columns
where
	table_name = 'tb_order';

执行以上sql如下所示。

4、拼接最终结果

使用 concat 函数,拼接想要关联展示的信息,比如 select 、as 等,即可将信息完全展示,最终sql如下所示,使用时 替换其中的【tb_order】即可。

select 
    concat('select ',
            group_concat(concat(column_name,
                        ' as `',
                        substring_index(column_comment, ':', 1)),
                '`'),
            ' from ',
            'tb_order') as querysql
from
    information_schema.columns
where
    table_name = 'tb_order';

执行以上sql,结果如下所示。

注:中文作为列的命名 可使用【`】,英文状态下 esc键 下一行的第一个键。
复制出来的拼接的结果,即本案例中想要展示的内容,如下所示。

select
	id as `订单id`,
	user_id as `用户id`,
	name as `商品名称`,
	pay_amount as `商品价格`,
	order_status as `订单状态`,
	num as `商品数量`,
	data_info as `订单信息`,
	is_enable as `是否有效`,
	created_user as `创建人`,
	created_time as `创建时间`
from
	tb_order

直接执行即可,控制台信息如下所示。

以上即本案例的过程,可参考使用。

到此这篇关于mysql快速列出来所有列信息的文章就介绍到这了,更多相关mysql所有列信息内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com