MariaDB添加CHECK约束时不检查已有违规行是否为预期行为?
这是预期行为吗?
是的,这完全是MariaDB 10.4.21版本的默认预期行为。
核心原因:
- MariaDB从10.2.1版本开始正式支持可生效的CHECK约束,但默认情况下,添加CHECK约束时不会对表中已存在的旧数据执行完整性校验,只会对后续的INSERT、UPDATE操作生效。
- 这种默认设计是为了兼容历史场景——比如给已有大量数据的表添加约束时,避免因旧数据不符合规则导致操作直接失败。
如何强制检查旧数据:
如果需要在添加约束时同时校验现有数据,可显式使用WITH CHECK子句,示例SQL如下:
ALTER TABLE 你的表名 ADD CONSTRAINT 约束名 CHECK (你的约束条件) WITH CHECK;
执行这条语句时,如果表中存在违反约束的旧数据,ALTER操作会直接失败并抛出错误,阻止约束创建。
内容的提问来源于stack exchange,提问作者Fabrizio Camuso
相关产品推荐
相关产品推荐

