掩码规则是Navicat数据生成器功能,非字段属性;仅用于批量生成合规模拟数据,需通过正则表达式在“Generate Mock Data”中配置,不替代数据库约束。
掩码规则不是字段属性,而是数据生成器功能
navicat 17 的表设计界面(如“表设计器”或“表结构”页)里没有“掩码”字段设置项。所谓“掩码规则”,实际只存在于 navicat data generator(数据生成器)中,用于批量填充模拟数据时控制字段值的格式和取值范围。如果你在建表时试图找“mask”“format”或“pattern”这类输入框,注定找不到——它不在 ddl 定义层,而在测试数据构造层。
必须用数据生成器 + 正则表达式实现业务格式约束
比如手机号、身份证号、SKU 编码这些带固定结构的字段,得靠 Data Generator 的正则表达式规则来生成合规值,而不是靠数据库约束或 UI 掩码。操作路径是:右键表 → Generate Mock Data... → 选中目标字段 → 在“Rule”列点击下拉 → 选 Regular Expression → 输入对应正则。
-
手机号:填^1[3-9]d{9}$(匹配 11 位大陆手机号) -
身份证号:填^[1-9]d{5}(19|20)d{2}(0[1-9]|1[0-2])(0[1-9]|[12]d|3[01])d{3}[dXx]$ -
SKU:填^[A-Z]{2}-[0-9]{4}-[A-Z]{2}$
注意:正则仅影响生成行为,不自动添加 CHECK 约束;若需运行时校验,仍要手动加 ALTER TABLE ... ADD CONSTRAINT。
字段间依赖关系只能靠生成顺序+条件规则模拟
Navicat 数据生成器不支持“当 A 字段为 X 时,B 字段必须满足 Y”的动态条件掩码,但可通过组合策略逼近效果:
- 先生成
gender字段(选List规则,值为Male/Female) - 再为
first_name字段选List规则,但分别导入两份名字列表(male_names.txt/female_names.txt),并在“File”选项中绑定对应文件 - 对
discount_rate这类数值字段,可用Expression规则写简单逻辑:if(price > 100, rand(10,30), 0)(注意语法是 Navicat 自定义表达式,非 SQL)
这种“分步生成 + 文件/表达式绑定”的方式,是目前唯一能模拟字段间业务耦合的路径。
别混淆掩码与数据库约束,二者作用域完全不同
容易被忽略的关键点:生成器里的正则只是造数据的“模具”,它不改变表结构,也不影响后续 INSERT 或应用写入。哪怕你用 ^1[3-9]d{9}$ 生成了 10 万条合规手机号,只要没加 CHECK (phone REGEXP '^1[3-9]\d{9}$'),任何非法值都能直接插入。真实业务系统中,掩码逻辑必须双落——生成器用于测试,CHECK/触发器/应用层校验用于生产。











