利用 INFORMATION_SCHEMA.COLUMNS 系統視圖,可秒級定義包含特定欄位名的所有資料表,無需逐庫逐表人工檢查。
SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.`COLUMNS` WHERE COLUMN_NAME = '目標欄位名';
TABLE_SCHEMA:資料庫名稱TABLE_NAME:資料表名稱COLUMN_NAME:精確匹配欄位名(區分大小寫取決於 collation)WHERE COLUMN_NAME LIKE '%user_id%'
WHERE COLUMN_NAME = 'status' AND DATA_TYPE = 'tinyint'
SELECT CONCAT('ALTER TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` MODIFY `', COLUMN_NAME, '` INT NOT NULL;')
FROM information_schema.COLUMNS
WHERE COLUMN_NAME = 'old_id' AND DATA_TYPE = 'varchar';
INFORMATION_SCHEMA 查詢在表極多(萬張以上)時可能較慢,建議:
TABLE_SCHEMA 縮小範圍innodb_stats_on_metadata = OFF 減少統計資訊鎖競爭