Mysql 使用【information_schema.COLUMNS】批量修改表字段注释
接手一个新项目,已经初步开发并上线了。因开发人员不按规范开发,数据库表中的字段注释基本没有,线上追加注释不方便,最后解决是在测试端生成相应的修改字段的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】批量修改表字段注释相关推荐
- mysql批量修改表字段信息,把mysql中列名大写字母列转化为小写
方法:通过sql语句拼凑出可执行的sql语句 把mysql中列名大写字母列转化为小写的sql SELECTconcat( 'alter table ', TABLE_NAME, ' change co ...
- mysql批量修改表字段类型(生成修改sql)
文章目录 >实例 需求 解决方案 >详解 问题 1.查出所需要的列名 2.确定修改SQL 3.通过CONCAT函数批量生成修改SQL 4.执行生成的sql 注意 >实例 需求 已知, ...
- MySQL 数据库利用alter语句修改表字段属性实例演示,如何拓展表字段长度,sql语句修改表字段名称和类型
-- 创建表 create table field_changes ( name char); desc field_changes; 给表添加字段. alter table field_change ...
- mysql中修改表字段名/字段长度/字段类型详解
在mysql中我们对数据表字段的修改命令只要使用alter就可以了,下面我来给大家详细介绍mysql中修改表字段名/字段长度/字段类型等等一些方法介绍,有需要了解的朋友可参考. 先来看看常用的方法 M ...
- 修改mysql表的字段名_mysql中修改表字段名/字段长度/字段类型详解
在mysql中我们对数据表字段的修改命令只要使用alter就可以了,下面我来给大家详细介绍mysql中修改表字段名/字段长度/字段类型等等一些方法介绍,有需要了解的朋友可参考. 先来看看常用的方法 M ...
- mysql修改表字段名称
修改表字段名格式如下: alter table 表名 change column 旧字段名 新字段名 [约束条件]: alter table MESSAGE change column LeaveMe ...
- oracle修改表字段名备注_Oracle修改表或者字段的注释
转自:https://www.cnblogs.com/fx-blog/p/7132833.html 语句: comment on table 表名 is '表的注释信息'; comment on co ...
- mysql数据库的注释语句是_coding++ :MySQL 使用 SQL 语句查询数据库所有表注释已经表字段注释...
1.要查询数据库 "mammothcode" 下所有表名以及表注释 /*查询数据库 'mammothcode' 所有表注释*/SELECT TABLE_NAME,TABLE_COM ...
- mysql使用sql语句查询数据库所有表注释已经表字段注释
场景: 1. 要查询数据库 "mammothcode" 下所有表名以及表注释 /* 查询数据库 'mammothcode' 所有表注释 */ SELECT TABLE_NAME,T ...
最新文章
- Android输入系统(三)InputReader的加工类型和InputDispatcher的分发过程
- 清华大学计算机系牛人,高考状元不靠加分靠实力
- linux history 用法,Linux之History的使用
- SpringCloudAlibaba--Seata简单案例
- FusionCharts 学习总结
- c语言谭浩强简介,大一C语言谭浩强总结(到数组)简介.ppt
- 图卷积神经网络5:图卷积的应用
- laravel Excel 3.1 列宽设置不起作用
- Linux上 如何查找yum安装包所缺缺少的依赖包及报错处理
- 【内推】阿里云 云原生团队 2022 届秋招
- 浅谈我对思维导图的认识
- dba招生_深圳DBA项目招生简介
- 新媒体运营的岗位晋升路线是怎么样的? 新媒体管理师是趋势吗?
- 攻防世界 web高手进阶区 10分题 weiphp
- GFocalV2解读
- 微信小程序 细分_如何将细分网络模型与iPhone应用程序集成
- tableau:凹凸图
- 蓝桥杯:幼儿园买玩具
- EW简单设置代理web服务器
- 计算机在地理科学中的探索,浅谈地理科学知识在幼儿园科学教育活动中的运用...