[SQL] 무슨 오류를 일으키는 : 참조 된 테이블에 대한 키를 제공에는 고유 제한 조건의 일치가 없다?
SQL무슨 오류를 일으키는 : 참조 된 테이블에 대한 키를 제공에는 고유 제한 조건의 일치가 없다?
예를 들어 테이블 구조 아래의 오류를 제공합니다 :이 참조 된 테이블에 주어진 키와 일치하는 고유 제한은 없으며,이 오류가이 상황에서 발생하는 이유는 지금은 알아낼 수 없습니다 잠시 동안 응시 한.
BEGIN;
CREATE TABLE foo (
name VARCHAR(256) PRIMARY KEY
);
CREATE TABLE bar(
pkey SERIAL PRIMARY KEY,
foo_fk VARCHAR(256) NOT NULL REFERENCES foo(name),
name VARCHAR(256) NOT NULL,
UNIQUE (foo_fk,name)
);
CREATE TABLE baz(
pkey SERIAL PRIMARY KEY,
bar_fk VARCHAR(256) NOT NULL REFERENCES bar(name),
name VARCHAR(256)
);
COMMIT;
이 오류가 발생하는 이유 위의 코드를 나에게 이해가되지 않습니다 다음과 같은 오류를 준다 실행, 깡통 사람이 설명합니다. 나는 포스트 그레스 9.1을 사용하고 있습니다
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "foo_pkey" for table "foo"
NOTICE: CREATE TABLE will create implicit sequence "bar_pkey_seq" for serial column "bar.pkey"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "bar_pkey" for table "bar"
NOTICE: CREATE TABLE / UNIQUE will create implicit index "bar_foo_fk_name_key" for table "bar"
NOTICE: CREATE TABLE will create implicit sequence "baz_pkey_seq" for serial column "baz.pkey"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "baz_pkey" for table "baz"
ERROR: there is no unique constraint matching given keys for referenced table "bar"
********** Error **********
ERROR: there is no unique constraint matching given keys for referenced table "bar"
SQL state: 42830
해결법
-
==============================
1.바 테이블에 이름 열이 UNIQUE 제약 조건이없는 때문입니다.
바 테이블에 이름 열이 UNIQUE 제약 조건이없는 때문입니다.
그래서 당신은 당신이 일치하는 두 개의 행이 있기 때문에 그것을 참조 될 줄의 행 bar_fk에 'AMS'와 바즈에 행 삽입 'AMS'의 이름을 포함하는 바 테이블에 2 개 행이 상상?
-
==============================
2.PostgreSQL은 모든 외부 키는 고유 한 (이름) 인덱스가 있어야합니다 그래서 당신의 바 테이블에 부모 테이블의 고유 키를 참조해야합니다.
PostgreSQL은 모든 외부 키는 고유 한 (이름) 인덱스가 있어야합니다 그래서 당신의 바 테이블에 부모 테이블의 고유 키를 참조해야합니다.
도 참조 http://www.postgresql.org/docs/9.1/static/ddl-constraints.html#DDL-CONSTRAINTS-FK 구체적으로 :
강조 광산.
-
==============================
3.당신은 당신이 정의하는 것을 다음했던 것처럼 테이블 수준의 제약 조건으로 UNIQUE를 수행 할 때 여기, 복합 기본 키와 같은 약간 DDL 제약을 볼 수있는 추출물
당신은 당신이 정의하는 것을 다음했던 것처럼 테이블 수준의 제약 조건으로 UNIQUE를 수행 할 때 여기, 복합 기본 키와 같은 약간 DDL 제약을 볼 수있는 추출물
"This specifies that the *combination* of values in the indicated columns is unique across the whole table, though any one of the columns need not be (and ordinarily isn't) unique."
두 필드가 가능성이 아닌 고유 한 값을 가질 수있는이 수단은 조합이 고유이 당신의 외래 키 제약 조건을 일치하지 않습니다.
가장 가능성이 당신이 제약 조건은 열 수준에서가되고 싶어요. 그래서보다는 테이블 레벨 제약으로 그들을 정의 이름 VARCHAR (60) NOT NULL UNIQUE 각 필드에 대한 indivdual 테이블 레벨 제약 조건을 지정하는 등의 열 정의의 끝 'APPEND'UNIQUE.
-
==============================
4.당신은 고유 제한 조건 등의 이름 열이 있어야합니다. 여기에 귀하의 문제를 변경하는 코드의 3 개 라인이다
당신은 고유 제한 조건 등의 이름 열이 있어야합니다. 여기에 귀하의 문제를 변경하는 코드의 3 개 라인이다
그게 다야.
from https://stackoverflow.com/questions/11966420/what-is-causing-error-there-is-no-unique-constraint-matching-given-keys-for-ref by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 쿼리는 지정된 키의 각 인스턴스에 대해 가장 최근의 행을 얻을 수 있습니다 (0) | 2020.05.08 |
---|---|
[SQL] A는 포함하거나 테이블 또는 인덱싱 된 뷰에 FREETEXT 조건이 전체 텍스트하지 않기 때문에 사용할 수 없습니다 인덱스 (0) | 2020.05.08 |
[SQL] 인덱스의 키 컬럼으로 사용하기 위해 유효하지 않은 유형이다 (0) | 2020.05.08 |
[SQL] 차 인덱스 번호를 다시 지정하는 방법 (0) | 2020.05.08 |
[SQL] SQL Server의 데이터베이스의 모든 테이블 사이의 관계를 알고 (0) | 2020.05.08 |