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.修改表注釋 三 ...