我要将
sql
exchange_rate = models.DecimalField(max_digits=10, decimal_places=4, null=True, blank=True)
修改为
sql
exchange_rate = models.DecimalField(max_digits=10, decimal_places=6, null=True, blank=True)
要将 exchange_rate 字段从 DECIMAL(10,4) 修改为 DECIMAL(10,6)可以使用以下 SQL 语句:
sql
ALTER TABLE xss_currency_exchange_rate
MODIFY COLUMN exchange_rate DECIMAL(10,6) NULL;
完整解释:
修改字段定义:
sql
MODIFY COLUMN exchange_rate DECIMAL(10,6) NULL
DECIMAL(10,6):新的数据类型,总位数 10 位,其中 6 位小数
NULL:保持允许空值(对应 Django 的 null=True)
重要注意事项:
1.数据安全操作流程:
sql
-- 1. 创建备份
CREATE TABLE xss_currency_exchange_rate_backup AS
SELECT * FROM xss_currency_exchange_rate;
-- 2. 检查现有数据
SELECT MIN(exchange_rate), MAX(exchange_rate), COUNT(*)
FROM xss_currency_exchange_rate;
-- 3. 执行修改
ALTER TABLE xss_currency_exchange_rate
MODIFY COLUMN exchange_rate DECIMAL(10,6) NULL;
-- 4. 验证结果
DESC xss_currency_exchange_rate;
2.数据类型变化影响:
原类型 DECIMAL(10,4):最大存储 999999.9999
新类型 DECIMAL(10,6):最大存储 9999.999999
整数部分容量从 6 位减少到 4 位,需确保现有数据整数部分不超过 4 位
3.数据兼容性检查:
执行修改前,检查是否有数据会超出新范围:
sql
-- 查找整数部分超过4位的数据
SELECT *
FROM xss_currency_exchange_rate
WHERE exchange_rate >= 10000 OR exchange_rate <= -10000;