MySQL 批量修改表和字段

2021-10-02 19:50:01 字數 4303 閱讀 8267

mysql 的 information_schema 資料庫中包含了大量的元資料,通過這些資料可以方便的獲取表和字段的資訊,通過組合這些資訊可以生成操作表和字段的 sql。

本文只是為了方便自己的記錄。

由於發現系統多個資料庫使用的字符集和排序方式有誤,因此要修改錯誤的這部分表,由於修改表無法直接影響 char, varchar, text 等字串型別的值,因此這部分欄位還需要特殊修改。又因為資料庫開啟了主從複製,因此生成的 sql 必須是use 資料庫形式,不能使用資料庫.表名形式。

select concat(

'alter database `'

, schema_name,

'` '

,'default character set=utf8 default collate=utf8_general_ci;'

)from schemata

where schema_name notin(

'information_schema'

,'mysql'

,'sys'

,'performance_schema'

)and default_collation_name !=

'utf8_general_ci'

;

生成的 sql 示例:

alter

database

`oa_wbs`

default

character

set=utf8 default

collate

=utf8_general_ci;

select concat(

'use `'

, table_schema,

'` ;'

,'alter table `'

, table_name,

'` '

,'default character set=utf8 collate=utf8_general_ci;'

)from

`tables

`-- 排除系統表

where table_schema notin(

'information_schema'

,'mysql'

,'sys'

,'performance_schema'

)and

table_collation !=

'utf8_general_ci'

;

生成的 sql 示例:

use

`test`

;alter

table

`author`

default

character

set=utf8 collate

=utf8_general_ci;

use`test`

;alter

table

`city`

default

character

set=utf8 collate

=utf8_general_ci;

use`test`

;alter

table

`country_i`

default

character

set=utf8 collate

=utf8_general_ci;

select concat(

'use `'

, table_schema,

'`; '

,' alter table `'

, table_name,

'` modify column `'

, column_name,

'` '

, data_type ,

-- varchar, char, 其他不需要指定長度

if(data_type like

'%text'

,' '

, concat(

'(', character_maximum_length,

') '))

,' character set utf8 collate utf8_general_ci ',if

(is_nullable =

'yes'

,'null default null'

,'not null'),

' comment ''', column_comment, ''';'

) sqlstr

from

`columns

`-- 排除系統表

where table_schema notin(

'information_schema'

,'mysql'

,'sys'

,'performance_schema'

)-- 排除檢視

andnot

exists

(select

1from

tables

where

tables

.table_type =

'view'

andtables

.table_name =

columns

.table_name)

-- 所有不是 utf8 的表

and(character_set_name !=

'utf8'

or collation_name !=

'utf8_general_ci'

);

生成的 sql 示例:

use

`datasync`

;alter

table

`sync_record_detail`

modify

column

`resource_form_value`

text

character

set utf8 collate utf8_general_ci null

default

null

comment

'資源配置'

;use

`datasync`

;alter

table

`sync_resource_config`

modify

column

`form_template`

text

character

set utf8 collate utf8_general_ci null

default

null

comment

'表單'

;use

`datasync`

;alter

table

`sync_resource_config`

modify

column

`form_default_value`

text

character

set utf8 collate utf8_general_ci null

default

null

comment

'表單預設值'

;use

`files`

;alter

table

`sys_file`

modify

column

`md5`

char(32

)character

set utf8 collate utf8_general_ci null

default

null

comment

'md5'

;

選取乙個格式化:

use

`files`

;alter

table

`sys_file`

modify

column

`md5`

char(32

)character

set utf8 collate utf8_general_ci

null

default

null

comment

'md5'

;

mysql 批量修改字段方法

一 正式環境操作注意事項 1 關閉應用訪問或者設定資料庫唯讀 mysql設為唯讀方法 開啟唯讀 mysql show global variables like read only 檢視相關引數,off為關,on為開,預設為off mysql flush tables with read lock ...

mysql批量修改表

select concat alter table table name,add column isdel varchar 2 default 1 comment 是否刪除1 正常 0 刪除 from information schema.tables where table name like t...

MySQL新增字段,修改字段,刪除字段,修改表資訊

mysql的簡單語法,常用,卻不容易記住。當然,這些sql語法在各資料庫中基本通用。下面列出 一 查詢資訊 1.登入資料庫 mysql u root p 資料庫名稱 2.查詢所有資料表 show tables 3.查詢表的字段資訊 desc 表名稱 二 修改表資訊 1.修改表名 2.修改表注釋 三 ...