2014-02-16 4 views
1

VARCHAR 열에 외래 키를 가져 오는 데 문제가 있습니다.MySql/Cloudbees ForeignKey로 VARCHAR

이상적으로 나는 이것을 복합 FK로 사용하고 싶습니다 (추가하려고 시도했을 때 알 수 있듯이).

로컬, MySQL은 5.6에서이 스크립트를 실행 나는 오류 번호를 얻을 수 1215 나는 150

내가 데이터 유형 인에 대한 문제에 여기에 다른 질문을 본 적이 잘못을 얻을 CloudBees에 스크립트를 실행하는 경우 정확히 똑같은데, 나는 당신이 스크립트에서 볼 수있는 것처럼 그것을 확인했다.

/* Start of REGION table */ 

CREATE TABLE REGION (
    ID INTEGER NOT NULL AUTO_INCREMENT,   /* Unique Identifier */ 
    RORDER INTEGER,        /* Order to be displayed by (currently unused) */ 
    LANG VARCHAR(3) DEFAULT 'en' ,     /* Language of this entry */ 
    NAME VARCHAR(30) NOT NULL,     /* Region Name */ 
    DESCR VARCHAR(50) DEFAULT '' NOT NULL, /* Region Desc */ 

    ACTIVE INTEGER DEFAULT '1' NOT NULL,  /* Is item active or not */ 
    CDATE TIMESTAMP DEFAULT 0,     /* Create Date */ 
    MODDATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,    /* Last Update Date */ 
    INSUSER VARCHAR(20) DEFAULT 'SYSTEM' NOT NULL,         /* User that inserted this entry */ 
    MODUSER VARCHAR(20),       /* User that last modified this entry */ 

    PRIMARY KEY(id) 
) engine InnoDB; 

COMMIT; 

ALTER TABLE REGION ADD CONSTRAINT UNIQUE (LANG, NAME); 

/* End of REGION table */ 

/* Start of LOCATION table */ 

CREATE TABLE LOCATION (
    ID INTEGER NOT NULL AUTO_INCREMENT,   /* Unique Identifier */ 
    REGIONNAME VARCHAR(30) NOT NULL,    /* FK - REGION.ID */ 
    LORDER INTEGER,        /* Order to be displayed by (currently unused) */ 
    NAME VARCHAR(30) DEFAULT '' NOT NULL,  /* Location Name (FK Key) */ 
    LANG VARCHAR(3) DEFAULT 'en' ,     /* Language of this entry */ 
    DESCR VARCHAR(50) DEFAULT '' NOT NULL, /* Location Desc */ 

    ACTIVE INTEGER DEFAULT '1' NOT NULL,  /* Is item active or not */ 
    CDATE TIMESTAMP DEFAULT 0,     /* Create Date */ 
    MODDATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,    /* Last Update Date */ 
    INSUSER VARCHAR(20) DEFAULT 'SYSTEM' NOT NULL,         /* User that inserted this entry */ 
    MODUSER VARCHAR(20),       /* User that last modified this entry */ 

    PRIMARY KEY(id) 
) engine InnoDB; 

ALTER TABLE LOCATION ADD CONSTRAINT FK_LOCATION_REGION FOREIGN KEY (REGIONNAME, LANG) REFERENCES REGION(NAME, LANG) ON DELETE CASCADE ON UPDATE CASCADE; 
ALTER TABLE LOCATION ADD CONSTRAINT UNIQUE (LANG, NAME); 

COMMIT; 

/* End of LOCATION table */ 
+0

아차! 외래 키 필드// FK - REGION.ID /는 이제 stackoverflow 사용자의 응답을 기다리거나// 코멘트 */업데이트하는 것을 잊었습니다. –

답변

0

REGION 테이블의 열에 인덱스가 필요했습니다.

솔루션 : 지역 후

생성하지만, 위치가 생성되기 전에 추가된다

CREATE INDEX REG_NAME_LANG ON REGION (NAME, LANG);