You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:45:28