当前位置: 首页 > article >正文

Mysql快速列出来所有列信息

文章目录

  • 需求描述
  • 实现思路
    • 1、如何查表信息
    • 2、如何取字段描述信息
    • 3、如何将列信息一行展示
    • 4、拼接最终结果

需求描述

如何将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_schemaCOLUMNS 中取目标表的信息。

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

直接执行即可,控制台信息如下所示。
在这里插入图片描述
以上即本案例的过程,可参考使用。


http://www.kler.cn/a/481826.html

相关文章:

  • 【蓝桥杯选拔赛真题60】C++寻宝石 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解
  • 2、蓝牙打印机点灯-GPIO输出控制
  • Ubuntu上安装Apache Spark
  • Mac中配置vscode(第一期:python开发)
  • 基于视觉惯性 SLAM(VSLAM)、相机和 IMU 数据的融合执行 6 自由度位姿跟踪
  • 审计表UNIFIED_AUDIT_TRAIL出现YAS-00220 utf8 sequence is wrong
  • http
  • 建立时间和保持时间
  • CANopen 学习笔记(1)
  • selenium学习笔记
  • MapReduce完整工作流程
  • Flutter Xcode 16+ iOS 18.1 使用image_pickers无法弹出选择图片的视图问题
  • C语言凯撒密码程序分享
  • 上海亚商投顾:沪指探底回升微涨 机器人概念股午后爆发
  • 二、模型训练与优化(4):模型优化-实操
  • ip属地出省会变吗?怎么出省让ip属地不变
  • spring mvc源码学习笔记之十
  • 【蓝桥杯选拔赛真题60】C++寻宝石 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解
  • Java 锁:多线程环境下的同步机制
  • 深度学习概述
  • 【Three.js基础学习】34.Earch Shaders
  • Redis 管道技术(Pipeline)
  • 2025新春烟花代码(二)HTML5实现孔明灯和烟花效果
  • 源代码防泄漏一机两用合体方案
  • 芯片详细讲解,从而区分CPU、MPU、DSP、GPU、FPGA、MCU、SOC、ECU
  • 数据结构:LinkedList与链表—无头单向链表(一)