# 字段演进规则

## 安全演进

### 新增可空列
```sql
ALTER TABLE users ADD COLUMN nickname VARCHAR(100);
```
- ✅ 安全：不影响现有数据
- ✅ 可回滚

### 新增有默认值的列
```sql
ALTER TABLE users ADD COLUMN status VARCHAR(20) DEFAULT 'active';
```
- ✅ 安全：现有行自动填充默认值
- ⚠️ 大表可能较慢

### 扩展字段长度
```sql
ALTER TABLE users ALTER COLUMN username TYPE VARCHAR(500);
```
- ✅ 安全：不丢失数据
- ✅ 可回滚（需确认无超长数据）

## 危险演进

### 缩小字段长度
```sql
-- 危险！可能截断数据
ALTER TABLE users ALTER COLUMN username TYPE VARCHAR(50);
```
- ❌ 可能丢失数据
- 必须先验证：`SELECT MAX(LENGTH(username)) FROM users;`

### 修改字段类型
```sql
-- 危险！可能转换失败
ALTER TABLE users ALTER COLUMN age TYPE INTEGER USING age::integer;
```
- ❌ 可能失败或丢失精度
- 必须先验证数据兼容性

### 删除列
```sql
-- 不可逆！
ALTER TABLE users DROP COLUMN old_field;
```
- ❌ 数据永久丢失
- 必须先备份

## 推荐流程

1. 新增新列（可空）
2. 代码同时写新旧列
3. 数据迁移（旧列 → 新列）
4. 代码只读写新列
5. 删除旧列（确认无使用后）
