MySQL ALTER命令
概述
ALTER TABLE语句用于修改现有表的结构。您可以在表创建后添加、删除或修改列、索引和约束。
常见ALTER操作
添加列:向表中添加新列 删除列:从表中删除列 修改列:更改列定义 重命名列:更改列名 添加约束:添加主键、外键等 删除约束:删除约束 更改选项:修改表选项
ALTER TABLE语法
基本语法
sql
| ADD [COLUMN] (column_definition, ...)
| DROP [COLUMN] column_name
| CHANGE [COLUMN] old_name new_name definition
| MODIFY [COLUMN] column_definition
| RENAME [TO] new_table_name添加列
添加单列
sql
-- Add column at end
-- Add column with default value
-- Add column with NOT NULL
-- Add column with auto increment添加多列
sql
-- Add several columns
-- Add columns with specific options在特定位置添加列
sql
-- Add as first column
-- Add after specific column
-- Add at end (default)添加带约束的列
sql
-- Add with PRIMARY KEY
-- Add with UNIQUE constraint
-- Add with FOREIGN KEY
-- Add with CHECK constraint (MySQL 8.0+)删除列
删除单列
sql
-- Drop column
-- Drop if exists (MySQL 8.0+)删除多列
sql
-- Drop several columns删除并添加列
sql
-- Drop and re-add column修改列
CHANGE与MODIFY
sql
-- MODIFY: Change definition only
-- CHANGE: Change name and definition更改数据类型
sql
-- Change VARCHAR length
-- Change INT to BIGINT
-- Change TEXT to LONGTEXT
-- Change to NOT NULL更改默认值
sql
-- Add default value
-- Change default value
-- Remove default value添加自增
sql
-- Add AUTO_INCREMENT to existing column
-- Set starting value重命名列
sql
-- Rename single column
-- Rename and change type
-- Rename with constraint重命名表
sql
-- Rename table
-- Alternative syntax
-- Rename multiple tables修改约束
添加主键
sql
-- Add single column primary key
-- Add composite primary key
-- Add primary key with auto increment删除主键
sql
-- Drop primary key
-- Drop and add new primary key添加外键
sql
-- Add foreign key
-- Add with ON DELETE
-- Add with ON UPDATE删除外键
sql
-- Drop specific foreign key
-- Find foreign key names
-- Drop foreign key by name添加唯一约束
sql
-- Add single column unique
-- Add composite unique
-- Add named unique constraint删除唯一约束
sql
-- Drop unique index
-- Drop named unique constraint修改索引
添加索引
sql
-- Add simple index
-- Add composite index
-- Add FULLTEXT index
-- Add spatial index删除索引
sql
-- Drop index
-- Drop primary key (also removes index)修改表选项
更改引擎
sql
-- Change storage engine
-- Convert multiple tables更改字符集
sql
-- Change character set
-- Change collation
-- Change both更改自增
sql
-- Set next auto increment value
-- Reset auto increment添加表注释
sql
-- Add or modify table comment
-- Add column comment复杂ALTER操作
重新排序列
sql
-- MySQL doesn't have direct REORDER
-- Must use multiple MODIFY statements转换为不同格式
sql
-- Convert to compressed row format
-- Convert to dynamic row format
-- Convert to fixed row format性能考虑
ALTER表性能
sql
-- ALTER TABLE can be slow on large tables
-- Consider these strategies:
-- 1. Use pt-online-schema-change (external tool)
-- Allows online schema changes
-- 2. Create new table and copy data
-- Add/modify columns
-- Copy data
-- Swap tables
-- Drop old
-- 3. Use ALGORITHM clause (MySQL 5.6+)
-- 4. Use LOCK clauseALGORITHM选项
sql
-- ALGORITHM = COPY (default for some changes)
-- Creates copy of table, slow, locks table
-- ALGORITHM = INPLACE (faster, minimal locking)
-- Modifies table in place
-- ALGORITHM = INSTANT (MySQL 8.0+, fastest)
-- No table copy, no lockingLOCK选项
sql
-- LOCK = DEFAULT (MySQL decides)
-- LOCK = NONE (allows concurrent DML)
-- LOCK = SHARED (allows concurrent reads)
-- LOCK = EXCLUSIVE (blocks all DML/DDL)实用示例
迁移:添加用户状态
sql
-- Add status column with default
-- Update existing users
-- Add index for status迁移:添加软删除
sql
-- Add deleted_at column
-- Update application logic to use soft deletes
-- Instead of: DELETE FROM users WHERE id = 1;
-- Use: UPDATE users SET deleted_at = NOW() WHERE id = 1;迁移:添加审计列
sql
-- Add audit columns
-- Add foreign keys for audit迁移:规范化数据
sql
-- Create normalized table
-- Migrate data
-- Add phone column (optional)
-- Drop old column故障排除
常见错误
sql
-- Error: Duplicate column name
-- ALTER TABLE users ADD COLUMN name VARCHAR(100);
-- Solution: Column already exists
-- Error: Key column doesn't exist
-- ALTER TABLE users ADD PRIMARY KEY (nonexistent);
-- Solution: Check column name
-- Error: Foreign key constraint fails
-- ALTER TABLE orders ADD FOREIGN KEY (user_id) REFERENCES users(id);
-- Solution: Ensure referenced column exists and has matching type
-- Error: Cannot delete column referenced by foreign key
-- ALTER TABLE users DROP COLUMN id;
-- Solution: Drop foreign key first检查表结构
sql
-- Show table structure
-- Show create statement
-- Show table information
-- Check columns小结
ALTER TABLE允许您:
修改结构:添加、删除、更改列 管理约束:添加和删除键 更改选项:引擎、字符集、自增 在线DDL:使用ALGORITHM和LOCK选项
修改大型表时考虑性能影响,并使用适当的ALGORITHM和LOCK选项。
上一个:事务
下一个:索引