本文介绍如何使用 mysql 的字符串函数(如 concat 和 right)对 700 条记录执行批量更新,将邮箱地址中的用户名动态替换为对应记录的 store_id,适用于 magento 2 环境下的数据修复场景。
在 Magento 2 数据库维护中,常需对 stores 表等核心表进行批量数据修正。根据需求,原始邮箱格式为 [email protected](含 HTML 标签及 Cloudflare 邮箱保护结构),但目标是将用户名部分统一替换为该行的 id 值,例如将 [email protected] → [email protected],[email protected] → [email protected]。
关键在于保留邮箱域名部分(即 @domain.com 及其后内容)不变,仅替换左侧用户名。观察示例可知,所有原始邮箱的域名后缀长度一致(如 @example.com 共 12 字符?需验证),但答案中给出 RIGHT(email, 9) 暗示作者假设域名固定为 9 字符(如 @test.com)。更健壮的做法是提取 @ 符号之后的全部子串,避免硬编码长度风险:
UPDATE stores
SET email = CONCAT(id, SUBSTRING(email, LOCATE('@', email)));✅ 该语句逻辑清晰:
⚠️ 注意事项:

最后,在 Magento 2 环境中执行前,建议在开发环境测试并清空配置缓存:bin/magento cache:clean config。批量更新完成后,可用 SELECT id, email FROM stores LIMIT 5; 验证结果是否符合预期。