Mysql 使用【information_schema.COLUMNS】批量修改表字段注释
生活随笔
收集整理的這篇文章主要介紹了
Mysql 使用【information_schema.COLUMNS】批量修改表字段注释
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
? ? ? ?接手一個新項目,已經(jīng)初步開發(fā)并上線了。因開發(fā)人員不按規(guī)范開發(fā),數(shù)據(jù)庫表中的字段注釋基本沒有,線上追加注釋不方便,最后解決是在測試端生成相應(yīng)的修改字段的Sql語句來同步線上的字段保證線上、線下數(shù)據(jù)庫表、字段注釋、字段信息統(tǒng)一。
1、獲取所有列信息(COLUMNS)
SELECT ?* ?FROM information_schema.COLUMNS WHERE ?TABLE_SCHEMA='數(shù)據(jù)庫名';? COLUMNS表:提供了關(guān)于表中的列的信息。詳細表述了某個列屬于哪個表。各字段說明如下:
| 字段 | 含義 |
| table_schema? | 表所有者(對于schema的名稱) |
| table_name? | 表名 |
| column_name? | 列名 |
| ordinal_position? | 列標(biāo)識號 |
| column_default? | 列的默認值 |
| is_nullable? | 列的為空性。如果列允許 null,那么該列返回 yes。否則,返回 no |
| data_type? | 系統(tǒng)提供的數(shù)據(jù)類型 |
| character_maximum_length | 以字符為單位的最大長度,適于二進制數(shù)據(jù)、字符數(shù)據(jù),或者文本和圖像數(shù)據(jù)。否則,返回 null。有關(guān)更多信息,請參見數(shù)據(jù)類型 |
| character_octet_length? | 以字節(jié)為單位的最大長度,適于二進制數(shù)據(jù)、字符數(shù)據(jù),或者文本和圖像數(shù)據(jù)。否則,返回 nu |
| numeric_precision? | 近似數(shù)字數(shù)據(jù)、精確數(shù)字數(shù)據(jù)、整型數(shù)據(jù)或貨幣數(shù)據(jù)的精度。否則,返回 null |
| numeric_precision_radix? | 近似數(shù)字數(shù)據(jù)、精確數(shù)字數(shù)據(jù)、整型數(shù)據(jù)或貨幣數(shù)據(jù)的精度基數(shù)。否則,返回 null |
| numeric_scale? | 近似數(shù)字數(shù)據(jù)、精確數(shù)字數(shù)據(jù)、整數(shù)數(shù)據(jù)或貨幣數(shù)據(jù)的小數(shù)位數(shù)。否則,返回 null |
| datetime_precision? | datetime 及 sql-92 interval 數(shù)據(jù)類型的子類型代碼。對于其它數(shù)據(jù)類型,返回 null |
| character_set_catalog? | 如果列是字符數(shù)據(jù)或 text 數(shù)據(jù)類型,那么返回 master,指明字符集所在的數(shù)據(jù)庫。否則,返回 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ù)庫。否則此列為 null |
| collation_schema? | 返回 dbo,為字符數(shù)據(jù)或 text 數(shù)據(jù)類型指明排序次序的所有者。否則,返回 null |
| collation_name? | 如果列是字符數(shù)據(jù)或 text 數(shù)據(jù)類型,那么為排序次序返回唯一的名稱。否則,返回 null。 |
| domain_catalog? | 如果列是一種用戶定義數(shù)據(jù)類型,那么該列是某個數(shù)據(jù)庫名稱,在該數(shù)據(jù)庫名中創(chuàng)建了這種用戶定義數(shù)據(jù)類型。否則,返回 null |
| domain_schema? | 如果列是一種用戶定義數(shù)據(jù)類型,那么該列是這種用戶定義數(shù)據(jù)類型的創(chuàng)建者。否則,返回 null |
| domain_name? | 如果列是一種用戶定義數(shù)據(jù)類型,那么該列是這種用戶定義數(shù)據(jù)類型的名稱。否則,返回 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 相關(guān)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 為測試的數(shù)據(jù)庫名稱AND? ?table_name = 'test_columns' ?-- test_columns 為 測試的表名稱?5、執(zhí)行第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的注釋';? 這樣 就可以把修改表字段語句給到生產(chǎn)環(huán)境的同學(xué)使用了,在生成環(huán)境執(zhí)行之前最好對照下sql語句是否更改了字段的類型、長度、字符集等信息。不然影響線上罪過就大了。
一定要檢查!!!
總結(jié)
以上是生活随笔為你收集整理的Mysql 使用【information_schema.COLUMNS】批量修改表字段注释的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【XJTUSE软件项目管理复习笔记】 第
- 下一篇: c语言字符串的题库,C考试系统题库含答案