{#drop-constraint-drop-constraint} # DROP CONSTRAINT 레이블에서 제약을 지웁니다. {#drop-constraint-synopsis} ## 개요
DROP CONSTRAINT constraint_name ON label_name

굵게 키워드 · 기울임 직접 채우는 자리 · [ ] 생략 가능 · ... 반복 가능. 구문 표기 규약을 참고하십시오.

{#drop-constraint-description} ## 설명 `DROP CONSTRAINT`는 레이블 하나에서 제약 하나를 지웁니다. [`CREATE CONSTRAINT`](create-constraint.md)가 만드는 두 형태 모두를 받습니다. `IS UNIQUE` 뒤의 배제 제약과, 조건 뒤의 검사 제약입니다. 고유성 제약이 소유한 인덱스도 함께 지웁니다. 이 문장은 의도적으로 작습니다. 이 문장에 없는 것들입니다: - **이름이 필수입니다.** "이 속성에 걸린 제약이 무엇이든"이라고 말할 방법이 없습니다. - **`IF EXISTS`가 없습니다.** `DROP CONSTRAINT IF EXISTS ...`는 구문 오류이므로, 없는 제약은 언제나 오류입니다. - **`CASCADE`도 `RESTRICT`도 없고,** 이름 목록도 없습니다. - 그 이름은 수식할 수 없고, 레이블 이름도 그렇습니다. 레이블은 `graph_path`가 지정한 그래프에서 찾습니다. - Cypher가 만든 것만이 아니라, 레이블 테이블의 이름 있는 모든 제약에 닿습니다. 레이블의 기본 키도 그중 하나입니다. 실행하기 전에 그 이름을 읽으십시오. - 속성 인덱스는 제약이 아닙니다. 그것은 [`DROP PROPERTY INDEX`](drop-property-index.md)로 지우십시오. {#drop-constraint-parameters} ## 매개변수 constraint_name : 지울 제약의 이름이며 수식하지 않습니다. `\dGv`·`\dGe`·`\d`가 모두 그것을 보고하고, `pg_constraint`도 그렇습니다. label_name : 그 제약이 걸린 레이블이며, `graph_path`가 지정한 그래프 안에서 찾습니다. {#drop-constraint-examples} ## 예제 예제는 [예제 데이터셋](../../get_started/example-dataset.md)을 쓰지 않고 자체 그래프인 `rulebooks`를 만들고, 끝에서 그것을 지웁니다. ```cypher CREATE GRAPH rulebooks; SET graph_path = rulebooks; CREATE VLABEL film; CREATE CONSTRAINT film_title_uniq ON film ASSERT title IS UNIQUE; CREATE CONSTRAINT ON film ASSERT year IS UNIQUE; CREATE VLABEL teen; CREATE CONSTRAINT teen_age ON teen ASSERT (10 <= age::int AND age::int <= 19); CREATE CONSTRAINT ON teen ASSERT age > 9; ``` {#drop-constraint-drop-a-unique-constraint} ### 고유성 제약 지우기 ```cypher DROP CONSTRAINT film_title_uniq ON film; ``` ``` DROP CONSTRAINT ``` 그 제약과 그 인덱스가 둘 다 사라졌습니다. 그 뒤에 만든, 이름 없는 것은 그대로입니다: ```psql \d rulebooks.film ``` ``` Table "rulebooks.film" Column | Type | Collation | Nullable | Default ------------+---------+-----------+----------+--------------------------------------------------------------------------------------------- id | graphid | | not null | graphid(graph_labid('rulebooks.film'::cstring), nextval('rulebooks.film_id_seq'::regclass)) properties | jsonb | | not null | jsonb_build_object() Indexes: "film_pkey" PRIMARY KEY, btree (id) "film_unique_constraint" EXCLUDE USING btree ((properties.'year') WITH =) Inherits: rulebooks.ag_vertex ``` 두 번째로 실행하면 오류입니다. 그것을 누그러뜨릴 `IF EXISTS`가 없기 때문입니다: ```cypher DROP CONSTRAINT film_title_uniq ON film; ``` ``` ERROR: constraint "film_title_uniq" of relation "film" does not exist ``` ```cypher DROP CONSTRAINT IF EXISTS film_title_uniq ON film; ``` ``` ERROR: syntax error at or near "EXISTS" LINE 1: DROP CONSTRAINT IF EXISTS film_title_uniq ON film; ^ ``` {#drop-constraint-find-the-name-of-a-constraint-you-did-not-name} ### 이름을 붙이지 않은 제약의 이름 찾기 이름 없이 만든 제약에는 유도된 이름이 붙습니다. `pg_constraint`가 그 레이블 테이블의 모든 제약을 나열합니다: ```sql SELECT conname FROM pg_constraint WHERE conrelid = 'rulebooks.teen'::regclass ORDER BY conname; ``` ``` conname -------------------------- teen_age teen_id_not_null teen_pkey teen_properties_check teen_properties_not_null (5 rows) ``` `teen_age`가 이름을 붙인 검사 제약이고 `teen_properties_check`가 유도된 것입니다. 나머지 셋은 그 레이블 자신의 모양에 속한 것입니다. {#drop-constraint-drop-a-check-constraint} ### 검사 제약 지우기 ```cypher DROP CONSTRAINT teen_properties_check ON teen; DROP CONSTRAINT teen_age ON teen; ``` 둘 다 사라졌고, `\dGv`가 보고할 것이 없다는 것으로 그것을 말해 줍니다: ```psql \dGv rulebooks.teen ``` ``` List of labels Graph | Name | Type | Owner -----------+------+--------+------- rulebooks | teen | vertex | agens (1 row) Vertex label "rulebooks.teen" -- Inherits: rulebooks.ag_vertex ``` {#drop-constraint-refusals-worth-recognizing} ### 알아 둘 만한 거부 사례 속성 인덱스는 이름이 무엇이든 제약이 아닙니다: ```cypher CREATE PROPERTY INDEX film_year_idx ON film (year); DROP CONSTRAINT film_year_idx ON film; ``` ``` ERROR: constraint "film_year_idx" of relation "film" does not exist ``` 그리고 그 이름에 그래프를 붙일 수는 없습니다: ```cypher DROP CONSTRAINT rulebooks.film_unique_constraint ON film; ``` ``` ERROR: syntax error at or near "." LINE 1: DROP CONSTRAINT rulebooks.film_unique_constraint ON film; ^ ``` 마지막으로 예제가 만든 그래프를 지웁니다: ```cypher DROP GRAPH rulebooks CASCADE; ``` {#drop-constraint-notes} ## 참고 ```{warning} `DROP CONSTRAINT`는 레이블 테이블의 이름 있는 모든 제약을 받으며, 레이블의 기본 키도 그중 하나입니다. `DROP CONSTRAINT film_pkey ON film`은 성공하고, 그 레이블은 `id`에 대한 기본 키가 없는 상태가 되며, 그것을 되돌려 놓는 문장은 없습니다. 먼저 `\dGv`나 `pg_constraint`로 이름을 확인하고, [`CREATE CONSTRAINT`](create-constraint.md)가 만든 이름을 지키십시오. ``` 제약을 바꾸려면 그것을 지우고 다시 만드십시오. `CREATE OR REPLACE CONSTRAINT`는 거부됩니다. 자식 레이블이 상속한 검사 제약은 그것을 선언한 레이블에서만 지울 수 있습니다: ```cypher CREATE GRAPH hierarchy; SET graph_path = hierarchy; CREATE VLABEL work; CREATE CONSTRAINT work_y ON work ASSERT (year::int > 1900); CREATE VLABEL feature INHERITS (work); ``` 자식을 이름으로 부르면 거부됩니다: ```cypher DROP CONSTRAINT work_y ON feature; ``` ``` ERROR: cannot drop inherited constraint "work_y" of relation "feature" ``` 부모에서 지우면 계열 전체에서 사라집니다: ```cypher DROP CONSTRAINT work_y ON work; DROP GRAPH hierarchy CASCADE; ``` {#drop-constraint-compatibility} ## 호환성 {#drop-constraint-isoiec-39075-gql} ### ISO/IEC 39075 (GQL) GQL에는 제약 DDL이 없으므로 이 문장에 대응하는 것이 없습니다. 표준이 그래프를 제약하는 방식은 그래프 타입이고, 그것은 ``(§12.7)로 통째로 지워집니다. 그래프 타입은 [GQL 적합성 표](../../appendix/gql-conformance.md)에 계획으로 기록돼 있습니다. {#drop-constraint-postgresql} ### PostgreSQL `DROP CONSTRAINT ... ON