日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時(shí)間:2024/3/12 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql 使用【information_schema.COLUMNS】批量修改表字段注释 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? ?接手一個(gè)新項(xiàng)目,已經(jīng)初步開發(fā)并上線了。因開發(fā)人員不按規(guī)范開發(fā),數(shù)據(jù)庫(kù)表中的字段注釋基本沒有,線上追加注釋不方便,最后解決是在測(cè)試端生成相應(yīng)的修改字段的Sql語(yǔ)句來同步線上的字段保證線上、線下數(shù)據(jù)庫(kù)表、字段注釋、字段信息統(tǒng)一。

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

SELECT ?* ?FROM information_schema.COLUMNS WHERE ?TABLE_SCHEMA='數(shù)據(jù)庫(kù)名';? COLUMNS表:提供了關(guān)于表中的列的信息。詳細(xì)表述了某個(gè)列屬于哪個(gè)表。各字段說明如下:

字段含義
table_schema?表所有者(對(duì)于schema的名稱)
table_name?表名
column_name?列名
ordinal_position?列標(biāo)識(shí)號(hào)
column_default?列的默認(rèn)值
is_nullable?列的為空性。如果列允許 null,那么該列返回 yes。否則,返回 no
data_type?系統(tǒng)提供的數(shù)據(jù)類型
character_maximum_length以字符為單位的最大長(zhǎng)度,適于二進(jìn)制數(shù)據(jù)、字符數(shù)據(jù),或者文本和圖像數(shù)據(jù)。否則,返回 null。有關(guān)更多信息,請(qǐng)參見數(shù)據(jù)類型
character_octet_length?以字節(jié)為單位的最大長(zhǎng)度,適于二進(jìn)制數(shù)據(jù)、字符數(shù)據(jù),或者文本和圖像數(shù)據(jù)。否則,返回 nu
numeric_precision?近似數(shù)字?jǐn)?shù)據(jù)、精確數(shù)字?jǐn)?shù)據(jù)、整型數(shù)據(jù)或貨幣數(shù)據(jù)的精度。否則,返回 null
numeric_precision_radix?近似數(shù)字?jǐn)?shù)據(jù)、精確數(shù)字?jǐn)?shù)據(jù)、整型數(shù)據(jù)或貨幣數(shù)據(jù)的精度基數(shù)。否則,返回 null
numeric_scale?近似數(shù)字?jǐn)?shù)據(jù)、精確數(shù)字?jǐn)?shù)據(jù)、整數(shù)數(shù)據(jù)或貨幣數(shù)據(jù)的小數(shù)位數(shù)。否則,返回 null
datetime_precision?datetime 及 sql-92 interval 數(shù)據(jù)類型的子類型代碼。對(duì)于其它數(shù)據(jù)類型,返回 null
character_set_catalog?如果列是字符數(shù)據(jù)或 text 數(shù)據(jù)類型,那么返回 master,指明字符集所在的數(shù)據(jù)庫(kù)。否則,返回 null
character_set_schema?如果列是字符數(shù)據(jù)或 text 數(shù)據(jù)類型,那么返回 dbo,指明字符集的所有者名稱。否則,返回 null
character_set_name?如果該列是字符數(shù)據(jù)或 text 數(shù)據(jù)類型,那么為字符集返回唯一的名稱。否則,返回 null
collation_catalog?如果列是字符數(shù)據(jù)或 text 數(shù)據(jù)類型,那么返回 master,指明在其中定義排序次序的數(shù)據(jù)庫(kù)。否則此列為 null
collation_schema?返回 dbo,為字符數(shù)據(jù)或 text 數(shù)據(jù)類型指明排序次序的所有者。否則,返回 null
collation_name?如果列是字符數(shù)據(jù)或 text 數(shù)據(jù)類型,那么為排序次序返回唯一的名稱。否則,返回 null。
domain_catalog?如果列是一種用戶定義數(shù)據(jù)類型,那么該列是某個(gè)數(shù)據(jù)庫(kù)名稱,在該數(shù)據(jù)庫(kù)名中創(chuàng)建了這種用戶定義數(shù)據(jù)類型。否則,返回 null
domain_schema?如果列是一種用戶定義數(shù)據(jù)類型,那么該列是這種用戶定義數(shù)據(jù)類型的創(chuàng)建者。否則,返回 null
domain_name?如果列是一種用戶定義數(shù)據(jù)類型,那么該列是這種用戶定義數(shù)據(jù)類型的名稱。否則,返回 NULL

?

?

2、新建立一張測(cè)試表,字段中增加常用的字段類型

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類型測(cè)試', ?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類型測(cè)試',`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 相關(guān)Sql語(yǔ)句

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 為測(cè)試的數(shù)據(jù)庫(kù)名稱AND? ?table_name = 'test_columns' ?-- test_columns 為 測(cè)試的表名稱?

5、執(zhí)行第4步的sql語(yǔ)句得到以下修改字段語(yǔ)句

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類型測(cè)試'; 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的注釋';

? 這樣 就可以把修改表字段語(yǔ)句給到生產(chǎn)環(huán)境的同學(xué)使用了,在生成環(huán)境執(zhí)行之前最好對(duì)照下sql語(yǔ)句是否更改了字段的類型、長(zhǎng)度、字符集等信息。不然影響線上罪過就大了。

一定要檢查!!!

總結(jié)

以上是生活随笔為你收集整理的Mysql 使用【information_schema.COLUMNS】批量修改表字段注释的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。