> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> 约束操作文档

# 约束操作

可使用以下语法添加、修改或删除约束：

```sql theme={null}
ALTER TABLE [db].name [ON CLUSTER cluster] ADD CONSTRAINT [IF NOT EXISTS] constraint_name {CHECK|ASSUME} expression;
ALTER TABLE [db].name [ON CLUSTER cluster] MODIFY CONSTRAINT [IF EXISTS] constraint_name {CHECK|ASSUME} expression;
ALTER TABLE [db].name [ON CLUSTER cluster] DROP CONSTRAINT [IF EXISTS] constraint_name;
```

与创建表类似，约束既可以声明为 `CHECK` (在 `INSERT` 时强制检查) ，也可以声明为 `ASSUME` (由优化器信任而不做检查) 。两者的区别，参见[约束](/docs/zh/reference/statements/create/table#constraints)。

`MODIFY CONSTRAINT` 会替换现有约束的声明，同时保留其在表定义中的位置。它还可以更改约束类型 (例如，从 `CHECK` 改为 `ASSUME`) 。这相当于删除该约束，再用新的声明重新添加。如果约束不存在，则查询会抛出错误，除非指定了 `IF EXISTS`。

更多信息，参见[约束](/docs/zh/reference/statements/create/table#constraints)。

这些查询会添加、更改或删除表中与约束相关的元数据，因此会立即生效。

<Tip>
  如果约束是新增或修改的，**不会对现有数据执行**约束检查。
</Tip>

复制表上的所有更改都会广播到 ZooKeeper，并应用到其他副本上。
