首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 修改欄位資料型別語法:ALTER TABLE MODIFY COLUMN 實戰

     編輯:MySQL 綜合教學

使用 ALTER TABLE MODIFY COLUMN 安全變更 MySQL 欄位型別

資料模型演進中,欄位型別調整是常見操作。MySQL 提供 MODIFY COLUMN 子句支援就地型別變更,本文說明標準語法、資料相容性檢查與避坑指南。

標準語法

ALTER TABLE `資料表名` 
MODIFY COLUMN `欄位名` 新資料型別 [預設值] [NULL/NOT NULL] [AUTO_INCREMENT] [COMMENT '註解']; 

實戰範例

-- 將 VARCHAR(20) 擴充為 VARCHAR(100)
ALTER TABLE users MODIFY COLUMN nickname VARCHAR(100) NOT NULL DEFAULT '' COMMENT '暱稱';

-- 將 INT 改為 BIGINT(防止 ID 耗盡)
ALTER TABLE orders MODIFY COLUMN order_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT;

-- 移除 NOT NULL 約束
ALTER TABLE products MODIFY COLUMN description TEXT NULL;

型別變更相容性矩陣

原型別目標型別風險等級說明
VARCHAR(10)VARCHAR(50)低擴充長度安全
VARCHAR(50)VARCHAR(10)高資料截斷,需先清洗
INTBIGINT低擴大範圍安全
BIGINTINT極高溢位風險,嚴禁直接執行
DATETIMETIMESTAMP中時區轉換、範圍差異(1970-2038)
TEXTVARCHAR(255)高超長資料截斷
DECIMAL(10,2)DECIMAL(12,4)低精度擴充安全

執行前必做三步驟

  1. 資料掃描:SELECT MAX(LENGTH(`欄位名`)), MAX(`欄位名`) FROM `表名`; 確認現有資料符合新型別限制。
  2. 備份驗證:使用 mysqldump --single-transaction 完整備份,或建立影子表測試變更。
  3. 低峰期執行:大表型別變更會鎖表重建,預估耗時 = 資料量 / 寫入速度,安排維護窗口。

線上變更替代方案(零停機)

  • pt-online-schema-change (Percona Toolkit):建立影子表、觸發器同步、分塊複製、原子切換。
  • gh-ost (GitHub):無觸發器、基於 binlog 同步、支援可暫停/限流。
  • MySQL 8.0 Instant DDL:部分操作(如擴充 VARCHAR、新增預設值)支援僅修改中繼資料,秒級完成。

驗證變更結果

SHOW CREATE TABLE `表名`;  -- 確認型別、約束、註解
DESC `表名`;               -- 快速檢視欄位定義
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved