MySQL将product表name列值替换空格后复制到slug列失败如何解决?
问题根因
- 你误用了
INSERT语句:INSERT的作用是向数据表新增全新的行,而非修改现有行的字段值。 - 你执行的语句实际效果是:给
product表新增了一批仅填充了slug字段、其余字段(包括原有的name)全部为空的无效行,原有行的slug字段从未被修改,所以看起来还是空的。语句没有报错是因为SQL语法本身合法,只是业务逻辑不符合你的需求。
正确解决方案
你需要使用UPDATE语句更新已有行的slug字段:
UPDATE product SET slug = REPLACE(name, ' ', '-');
可选前置验证步骤
如果担心全表更新出错,可以先执行查询验证替换逻辑是否符合预期:
SELECT name, REPLACE(name, ' ', '-') AS calculated_slug FROM product LIMIT 10;
确认替换结果正确后再执行UPDATE操作即可。
垃圾数据清理(可选)
之前执行的INSERT语句已经插入了一批无效的空行,如果需要清理,可执行以下语句(前提是原表name字段为非空约束,新增行的name字段为空):
DELETE FROM product WHERE name IS NULL;
内容的提问来源于stack exchange,提问作者Thomas Britsom
相关产品推荐
相关产品推荐

