2011-02-14 2 views
2

SQL 테이블에서 외래 키를 제거하려고하는데 어떤 이유로 작동하지 않습니다.SQL이이 외래 키를 삭제하도록 허용하지 않는 이유는 무엇입니까?

ALTER TABLE PETS 
DROP FOREIGN KEY OWNER_NAME 

하지만 위의 방법은 작동하지 않습니다. 엉망진창 (syntax)이 많지 않고 PETS에는 다른 테이블에 외래 키 OWNER_NAME이 있습니다. 뭐라 구요?

애완 동물 테이블 :

CREATE TABLE PETS 
(
    NAME VARCHAR(10) NOT NULL, 
    BIRTH_DATE DATE NOT NULL, 
    OWNER_NAME VARCHAR(10) NOT NULL, 
    PRIMARY KEY (NAME), 
    FOREIGN KEY (OWNER_NAME) REFERENCES OWNER ON DELETE CASCADE 
); 

오류 받았다은 "OWNER_NAME는"정의되지 않은 이름입니다.

+2

우리에게 PETS 용 테이블 작성 문구를 보여주십시오. 또한 – Jason

+0

도 오류를 게시하십시오. 어떤 SQL을 사용하고 있습니까? MYSQL? –

+0

@ David 나는 완전히 확신하지 못합니다. DB2를 사용하고 있습니다. – Waffles

답변

3

외래 키를 삭제하는 구문은 다음과 같습니다 당신의 예에서

ALTER TABLE table 
     DROP FOREIGN KEY fk_name 

(즉 OWNER_NAME하지 외부 키의 이름이고, 외래 키 제약 조건을 생성하는 방법을 보여줍니다 - 즉이다 OWNER 테이블을 참조하는 데 사용되는 PETS 테이블의 열 이름

CREATE TABLE 문에 제약 조건의 특정 이름을 지정하지 않았기 때문에 시스템 생성 이름이 생기므로 SQL110213181225320과 같은 것.

당신은 SYSCAT.REFERENCES보고 제약 조건의 이름을 찾을 수 있습니다,

SELECT constname, fk_colnames 
    FROM syscat.references 
    WHERE tabschema = 'YOURSCHEMA' 
    AND tabname = 'PETS' 

을 다음이 쿼리에서 CONSTNAME의 적절한 값을 사용하여 외래 키를 삭제할 수 있습니다 :

ALTER 표 애완 동물 외부 키 삭제 SQL110213181225320; 당신은 외래 키 제약 조건에 대한 좀 더 일반적인 이름을 갖고 싶어

참고로, 당신은 CREATE TABLE 문에서 정의 할 수 있습니다 :

CREATE TABLE PETS 
(
    NAME VARCHAR(10) NOT NULL, 
    BIRTH_DATE DATE NOT NULL, 
    OWNER_NAME VARCHAR(10) NOT NULL, 
    PRIMARY KEY (NAME), 
    CONSTRAINT FK_OWNER 
    FOREIGN KEY (OWNER_NAME) 
    REFERENCES OWNER 
    ON DELETE CASCADE 
); 

을 이렇게하면, 당신은 볼거야 SYSCAT.REFERENCES에 대한 조회는 'FK_OWNER'를 리턴합니다.

관련 문제