制約の追加詳細¶
このトピックの内容:
制約のセキュリティ権限¶
主キー制約または一意制約を作成する場合:
既存のテーブルを変更して制約を追加する場合、ユーザーの現在のロールには、テーブルに対するOWNERSHIP権限が必要です。
新しいテーブルを作成する場合、ユーザーの現在のロールには、テーブルが作成されるスキーマに対するCREATE TABLE権限が必要です。
外部キー制約を作成する場合:
ユーザーの現在のロールには、外部キーテーブルに対するOWNERSHIP権限が必要です。
ユーザーの現在のロールには、一意/主キーテーブルに対するREFERENCES権限が必要です。
GRANT <権限> および REVOKE <権限> コマンドを使用して、ロールへのREFERENCES権限の付与および取り消しができます。
GRANT REFERENCES ON TABLE <pk_table_name> TO ROLE <role_name> REVOKE REFERENCES ON TABLE <pk_table_name> FROM ROLE <role_name>
コピーコマンドでの制約のサポート¶
Snowflakeは、 CREATE TABLE を使用したテーブルのコピーの作成をサポートしています。
空のコピーを作成するには、 CREATE TABLE ... LIKE を使用します。
クローンを作成するには、 CREATE TABLE ... CLONE を使用します。
さらに、スキーマまたはデータベースがクローンされると、テーブルのコピーが自動的に作成されます。
テーブルのコピーが作成される方法にかかわらず、元のテーブルの制約もコピーされます。参照テーブル(外部キーテーブル)と被参照テーブル(主キーテーブル)で外部キーをコピーすると、次の状況が発生する場合があります。
両方のテーブルが同じコマンドでコピーされた場合(スキーマまたはデータベースのクローン作成中など)、新しい参照テーブルと被参照テーブルの間に新しい外部キーが作成されます。
参照テーブルのみがコピーされる場合、参照テーブルに新しい外部キーが作成され、被参照テーブルとして元の主キーテーブルが挙げられます。
被参照テーブルのみがコピーされる場合、主/一意キーはコピーされますが、新しい外部キーは作成されません。
その結果、ユーザーが参照テーブルと被参照テーブルを別々にコピーする場合、新しい外部キーを手動で作成するか、新しい外部キーの主キーテーブルを手動で変更する必要があります。
GET_DDLでの制約のサポート¶
Snowflakeは、 GET_DDL の制約をサポートしています。ただし、次のことに注意してください。
NOT NULL
やDEFAULT
などの単一列のみの制約は、列の定義に従ってインラインで再構築されます。一意/主/外部キーなどのテーブル制約は、単一の列で構成されている場合でも、常にアウトライン制約として再構築されます。
名前のない制約(システムにより生成された名前の制約)の場合、システムにより生成された名前は GET_DDL から返されません。
制約に対するコメント¶
他のデータベースオブジェクトや構築と同様に、Snowflakeは制約に対するコメントの提供をサポートしています。次の2つの方法で、制約にコメントを追加できます。
アウトライン制約は、COMMENT句をサポートします。この句では、制約の定義中にコメントを指定できます。
コメントがあいまいさの原因になる可能性があるため、インラインで制約を定義する場合、コメントは許可されません。
COMMENTコマンドを使用して、制約にコメントを設定することもできます。