接手一个新项目,已经初步开发并上线了。因开发人员不按规范开发,数据库表中的字段注释基本没有,线上追加注释不方便,最后解决是在测试端生成相应的修改字段的Sql语句来同步线上的字段保证线上、线下数据库表、字段注释、字段信息统一。

1、获取所有列信息(COLUMNS)

SELECT  *  FROM information_schema.COLUMNS WHERE  TABLE_SCHEMA='数据库名';  COLUMNS表:提供了关于表中的列的信息。详细表述了某个列属于哪个表。各字段说明如下:

字段 含义
table_schema  表所有者(对于schema的名称)
table_name  表名
column_name  列名
ordinal_position  列标识号
column_default  列的默认值
is_nullable  列的为空性。如果列允许 null,那么该列返回 yes。否则,返回 no
data_type  系统提供的数据类型
character_maximum_length 以字符为单位的最大长度,适于二进制数据、字符数据,或者文本和图像数据。否则,返回 null。有关更多信息,请参见数据类型
character_octet_length  以字节为单位的最大长度,适于二进制数据、字符数据,或者文本和图像数据。否则,返回 nu
numeric_precision  近似数字数据、精确数字数据、整型数据或货币数据的精度。否则,返回 null
numeric_precision_radix  近似数字数据、精确数字数据、整型数据或货币数据的精度基数。否则,返回 null
numeric_scale  近似数字数据、精确数字数据、整数数据或货币数据的小数位数。否则,返回 null
datetime_precision  datetime 及 sql-92 interval 数据类型的子类型代码。对于其它数据类型,返回 null
character_set_catalog  如果列是字符数据或 text 数据类型,那么返回 master,指明字符集所在的数据库。否则,返回 null
character_set_schema  如果列是字符数据或 text 数据类型,那么返回 dbo,指明字符集的所有者名称。否则,返回 null
character_set_name  如果该列是字符数据或 text 数据类型,那么为字符集返回唯一的名称。否则,返回 null
collation_catalog  如果列是字符数据或 text 数据类型,那么返回 master,指明在其中定义排序次序的数据库。否则此列为 null
collation_schema  返回 dbo,为字符数据或 text 数据类型指明排序次序的所有者。否则,返回 null
collation_name  如果列是字符数据或 text 数据类型,那么为排序次序返回唯一的名称。否则,返回 null。
domain_catalog  如果列是一种用户定义数据类型,那么该列是某个数据库名称,在该数据库名中创建了这种用户定义数据类型。否则,返回 null
domain_schema  如果列是一种用户定义数据类型,那么该列是这种用户定义数据类型的创建者。否则,返回 null
domain_name  如果列是一种用户定义数据类型,那么该列是这种用户定义数据类型的名称。否则,返回 NULL

2、新建立一张测试表,字段中增加常用的字段类型

create table test_columns(  id    int primary key auto_increment,  col_tinyint tinyint(1),col_char char(20) not null default '0'  comment 'col_char的注释',  col_date    date default '2021-05-21' comment 'col_date类型测试',  col_varchar varchar(20) not null default '' ,  col_bigint  bigint ,  col_text text comment 'text',  col_timestamp    timestamp not null default current_timestamp on update current_timestamp,  col_time datetime not null default now()
);  

3、给新建立的表增加注释信息

CREATE TABLE `test_columns` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`col_tinyint` tinyint(1) DEFAULT NULL COMMENT 'col_tinyint的注释',`col_char` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '0' COMMENT 'col_char的注释',`col_date` date DEFAULT '2021-05-21' COMMENT 'col_date类型测试',`col_varchar` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'col_varchar的注释',`col_bigint` bigint(20) DEFAULT NULL COMMENT 'col_bigint的注释',`col_text` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'col_text的注释',`col_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'col_timestamp的注释',`col_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'col_time的注释',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

4、通过【COLUMNS】生成 test_columns 表的modify 相关Sql语句

SELECT
concat(    'alter table ',     table_schema, '.', table_name,     ' modify column ', column_name, ' ', column_type, ' ',     if(is_nullable = 'YES', ' ', 'not null '),     if(column_default IS NULL, '',     if(    data_type IN ('char', 'varchar')     OR     data_type IN ('date', 'datetime', 'timestamp') AND column_default != 'CURRENT_TIMESTAMP',     concat(' default ''', column_default,''''),     concat(' default ', column_default)    )    ),     if(extra is null or extra='','',concat(' ',extra)),  ' comment ''', column_comment, ''';'
) s
FROM information_schema.columns
WHERE table_schema = 'col_test'  --   col_test 为测试的数据库名称AND   table_name = 'test_columns'  -- test_columns 为 测试的表名称 

5、执行第4步的sql语句得到以下修改字段语句

alter table col_test.test_columns modify column id int(11) not null  auto_increment comment '主键ID';
alter table col_test.test_columns modify column col_tinyint tinyint(1)   comment 'col_tinyint的注释';
alter table col_test.test_columns modify column col_char char(20) not null  default '0' comment 'col_char的注释';
alter table col_test.test_columns modify column col_date date   default '2021-05-21' comment 'col_date类型测试';
alter table col_test.test_columns modify column col_varchar varchar(20) not null  default '' comment 'col_varchar的注释';
alter table col_test.test_columns modify column col_bigint bigint(20)   comment 'col_bigint的注释';
alter table col_test.test_columns modify column col_text text   comment 'col_text的注释';
alter table col_test.test_columns modify column col_timestamp timestamp not null  default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP comment 'col_timestamp的注释';
alter table col_test.test_columns modify column col_time datetime not null  default CURRENT_TIMESTAMP comment 'col_time的注释';

这样 就可以把修改表字段语句给到生产环境的同学使用了,在生成环境执行之前最好对照下sql语句是否更改了字段的类型、长度、字符集等信息。不然影响线上罪过就大了。

一定要检查!!!

Mysql 使用【information_schema.COLUMNS】批量修改表字段注释相关推荐

  1. mysql批量修改表字段信息,把mysql中列名大写字母列转化为小写

    方法:通过sql语句拼凑出可执行的sql语句 把mysql中列名大写字母列转化为小写的sql SELECTconcat( 'alter table ', TABLE_NAME, ' change co ...

  2. mysql批量修改表字段类型(生成修改sql)

    文章目录 >实例 需求 解决方案 >详解 问题 1.查出所需要的列名 2.确定修改SQL 3.通过CONCAT函数批量生成修改SQL 4.执行生成的sql 注意 >实例 需求 已知, ...

  3. MySQL 数据库利用alter语句修改表字段属性实例演示,如何拓展表字段长度,sql语句修改表字段名称和类型

    -- 创建表 create table field_changes ( name char); desc field_changes; 给表添加字段. alter table field_change ...

  4. mysql中修改表字段名/字段长度/字段类型详解

    在mysql中我们对数据表字段的修改命令只要使用alter就可以了,下面我来给大家详细介绍mysql中修改表字段名/字段长度/字段类型等等一些方法介绍,有需要了解的朋友可参考. 先来看看常用的方法 M ...

  5. 修改mysql表的字段名_mysql中修改表字段名/字段长度/字段类型详解

    在mysql中我们对数据表字段的修改命令只要使用alter就可以了,下面我来给大家详细介绍mysql中修改表字段名/字段长度/字段类型等等一些方法介绍,有需要了解的朋友可参考. 先来看看常用的方法 M ...

  6. mysql修改表字段名称

    修改表字段名格式如下: alter table 表名 change column 旧字段名 新字段名 [约束条件]: alter table MESSAGE change column LeaveMe ...

  7. oracle修改表字段名备注_Oracle修改表或者字段的注释

    转自:https://www.cnblogs.com/fx-blog/p/7132833.html 语句: comment on table 表名 is '表的注释信息'; comment on co ...

  8. mysql数据库的注释语句是_coding++ :MySQL 使用 SQL 语句查询数据库所有表注释已经表字段注释...

    1.要查询数据库 "mammothcode" 下所有表名以及表注释 /*查询数据库 'mammothcode' 所有表注释*/SELECT TABLE_NAME,TABLE_COM ...

  9. mysql使用sql语句查询数据库所有表注释已经表字段注释

    场景: 1. 要查询数据库 "mammothcode" 下所有表名以及表注释 /* 查询数据库 'mammothcode' 所有表注释 */ SELECT TABLE_NAME,T ...

最新文章

  1. Android输入系统(三)InputReader的加工类型和InputDispatcher的分发过程
  2. 清华大学计算机系牛人,高考状元不靠加分靠实力
  3. linux history 用法,Linux之History的使用
  4. SpringCloudAlibaba--Seata简单案例
  5. FusionCharts 学习总结
  6. c语言谭浩强简介,大一C语言谭浩强总结(到数组)简介.ppt
  7. 图卷积神经网络5:图卷积的应用
  8. laravel Excel 3.1 列宽设置不起作用
  9. Linux上 如何查找yum安装包所缺缺少的依赖包及报错处理
  10. 【内推】阿里云 云原生团队 2022 届秋招
  11. 浅谈我对思维导图的认识
  12. dba招生_深圳DBA项目招生简介
  13. 新媒体运营的岗位晋升路线是怎么样的? 新媒体管理师是趋势吗?
  14. 攻防世界 web高手进阶区 10分题 weiphp
  15. GFocalV2解读
  16. 微信小程序 细分_如何将细分网络模型与iPhone应用程序集成
  17. tableau:凹凸图
  18. 蓝桥杯:幼儿园买玩具
  19. EW简单设置代理web服务器
  20. 计算机在地理科学中的探索,浅谈地理科学知识在幼儿园科学教育活动中的运用...

热门文章

  1. 手机放哪里辐射危害最低?
  2. 如果长期玩手机用计算机打字,长期玩手机带来的危害!来看看你中了几个
  3. 震撼!世界从10亿光年到0.1飞米!
  4. MATLAB产生数字调制基带信号(python对比)
  5. module blacklist
  6. Retrofit+协程使用填坑和优化
  7. 语音算法论文中frame-level,segment-level,utterance-level fearure
  8. lin通信ldf文件解析_LIN通讯机制
  9. 自由职业为何会崛起成为一股暗潮?
  10. 数字电视专业术语--DTV名词扫盲