> ## 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` (検証は行わず、オプティマイザが正しいものとして扱う) のいずれかとして宣言できます。両者の違いについては、[constraints](/docs/ja/reference/statements/create/table#constraints) を参照してください。

`MODIFY CONSTRAINT` は、既存の制約の宣言を、テーブル定義内での位置を維持したまま置き換えます。また、制約の種類 (たとえば `CHECK` から `ASSUME` へ) を変更することもできます。これは、制約を削除して新しい宣言で再度追加するのと同等です。制約が存在しない場合は、`IF EXISTS` が指定されていない限り、クエリはエラーをスローします。

詳しくは [constraints](/docs/ja/reference/statements/create/table#constraints) を参照してください。

これらのクエリは、テーブルの制約に関するメタデータを追加、変更、または削除するだけなので、即座に処理されます。

<Tip>
  制約チェックは、制約を追加または変更しても、既存のデータに対しては**実行されません**。
</Tip>

レプリケートテーブルに対するすべての変更は ZooKeeper にブロードキャストされ、他のレプリカにも適用されます。
