2014-09-07 3 views
-1

저는 SQL을 처음 사용하고 테이블에서 다른 테이블을 참조하는 방법을 배우려고합니다. 이것은 내가 무엇을 가지고 :하나의 데이터베이스 테이블을 다른 데이터베이스 테이블로 제한하는 데 문제가 있습니다

그럼 예를 들어 내 참조 테이블이
CREATE TABLE IF NOT EXISTS itemData (
    id int(11) AUTO_INCREMENT PRIMARY KEY, 
    title varchar(64) NOT NULL, 
    sector_id int(11) DEFAULT NULL, 
    status_id int(11) DEFAULT NULL, 
    locations_id int(11) DEFAULT NULL, 
    payments_id int(11) DEFAULT NULL, 
    type_id int(11) DEFAULT NULL, 
    CONSTRAINT `fk_sector_id` FOREIGN KEY (sector_id) REFERENCES `sector` (`sector_id`), 
    CONSTRAINT `fk_status_id` FOREIGN KEY (`status_id`) REFERENCES `status` (`status_id`), 
    CONSTRAINT `fk_locations_id` FOREIGN KEY (`locations_id`) REFERENCES `location` (`locations_id`), 
    CONSTRAINT `fk_payments_id` FOREIGN KEY (`payments_id`) REFERENCES `payments` (`payments_id`), 
    CONSTRAINT `fk_type_id` FOREIGN KEY (`type_id`) REFERENCES `type` (`type_id`) 
); 

:

CREATE TABLE IF NOT EXISTS itemStatus (
    id int(11) AUTO_INCREMENT PRIMARY KEY, 
    name varchar(64) NOT NULL UNIQUE KEY 
); 

이 유효성을 검사하지 않는 것을, 내가 잘못하시기 바랍니다 갈 곳 사람이 말해 줄 수?

CONSTRAINT `fk_status_id` FOREIGN KEY (`status_id`) REFERENCES `status` (`status_id`) 

가 여기에 테이블 정의의 : 해당 테이블에 status_id라는 이름의 열이

CREATE TABLE IF NOT EXISTS itemStatus (
    id int(11) AUTO_INCREMENT PRIMARY KEY, 
    name varchar(64) NOT NULL UNIQUE KEY 
); 

없습니다

+0

무슨 에러가 발생합니까 :이 같은 제약 조건을 다음 테이블 정의를 변경 변경하려면 해달라고 경우에도

? 그리고 어쨌든 두 테이블은 어떻게 관련이 있습니까? – VMai

+0

존재하지 않는 테이블을 참조 할 수 없습니다. 따라서 테이블을 올바른 순서로 작성해야합니다. 이 테이블을 생성하기 전에'sector','status','location','payments','type' 테이블을 적절한 이름의 인덱스 된 컬럼 – VMai

답변

3

당신은 아마 같은 테이블 정의를 변경해야 .

CONSTRAINT `fk_id` FOREIGN KEY (`id`) REFERENCES `itemstatus` (`id`) 
+0

@ James Willson : - 당신이 참조하려고하는 테이블이 틀린 이름 임에 유의하십시오. 그래서 그것을 바로 잡아야합니다. :) –

+0

RT이 비트가 있습니다 : https://gist.github.com/employ/06ce1d7263e0d26fd92f –

+0

하지만 참조 행 (ie sector_id)을 참조 할만한 것이 아무것도 없습니다. –

2

은 여기 제약 조건입니다.

기본 키 열의 이름을 status_id으로 변경하거나 id을 가리 키도록 제약 조건을 변경하십시오. 테이블에 제한 조건 정의는 다음과 같이 그대로

CREATE TABLE IF NOT EXISTS itemStatus (
    status_id int(11) AUTO_INCREMENT PRIMARY KEY, 
    name varchar(64) NOT NULL UNIQUE KEY 
); 

:

CONSTRAINT `fk_status_id` FOREIGN KEY (`status_id`) REFERENCES `itemstatus` (`status_id`), 

당신은 제약 올바른 테이블을 업데이트해야

+0

과 함께 생성해야하며'status' 테이블이 아닙니다. 테이블 'itemStatus' 너무, 그래서 기존 테이블에 대한 제약 조건을 변경하는 것이 좋을 것이라고 가정합니다. – VMai

+0

ID로 유지한다고 가정 할 때 어떤 제약 조건을 변경해야합니까? '''CONSTRAINT'fk_id' FOREIGN KEY ('id') 참고'status' ('id')'''? –

관련 문제