2012-05-09 3 views
0

두 개의 테이블을 만들고 사실 외래 키 제약 조건을 추가하고 있습니다. 외래 키가 작동하지 않습니다. 오류 코드 1005, SQL 상태 HY000 : 테이블을 만들 수 없습니다.

CREATE TABLE IF NOT EXISTS personal_config (
    config_id INT(10) NOT NULL AUTO_INCREMENT, 
    last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    configuration TEXT(25600) NOT NULL, 
    PRIMARY KEY (config_id) 
)ENGINE=InnoDB DEFAULT CHARSET=utf8; 

ALTER TABLE personal_config ADD CONSTRAINT personal_config_fk_user FOREIGN KEY 
(config_id) REFERENCES user(personal_config); 

CREATE TABLE `user` (
    `user_id` int(11) NOT NULL auto_increment, 
    `user_ad_id` varchar(500) default NULL, 
    `user_name` varchar(100) NOT NULL, 
    `login_id` varchar(100) default NULL, 
    `email` varchar(256) NOT NULL, 
    `personal_config` int(10) NOT NULL, 
    PRIMARY KEY (`user_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

을 그리고 난 같은 오류가 계속하지만 그것을 알아낼 수 없습니다 :

두 테이블은 다음과 같은 정의된다. 관련 스레드를 모두 검색했습니다.

+0

이 경우 오류를받을 수 있나요 실행할 수 있습니다 다음 기본 키입니다 설정하면? –

+0

'ALTER TABLE'이 역순으로 보임에 유의하십시오. 'config_id'는 auto_increment 값이기 때문에,'user'는 FK에서 personal_config가되어야합니다. –

+0

두 번째 이후. 테이블이 잘 작성되고, 변경되지 않은 테이블 만 작동합니다. – MikeG

답변

1

귀하의 ALTER TABLE 문이 뒤로이다. personal_config.config_id은 auto_increment 기본 키이므로 외래 키는 users 테이블에 대해 personal_config이 아닌 personal_config에 대해 users 테이블에 정의되어야합니다.

ALTER TABLE users ADD CONSTRAINT user_fk_personal_config 
    FOREIGN KEY (personal_config) 
    REFERENCES personal_config(config_id); 
+0

두 번째 눈 쌍이 필요했습니다. 좋아, 그래서 그것은 의미가 있고 그것을 고쳐 준다. – MikeG

2

귀하의 FK config_id은 자동 증가 필드가 될 수 없습니다. 그 말이 맞지 않습니까? 이 필드는 외부 테이블의 값을 반영하며 로컬 테이블에서 임의로 설정할 수 없습니다.

나는 이것이 당신이 원하는 생각 :

ALTER TABLE user ADD CONSTRAINT personal_config_fk_user FOREIGN KEY (personal_config) REFERENCES personal_config(config_id); 
0

당신이 당신의 사용자 테이블 필드 personal_config가 처음 CREATE TABLE 또는 초 후에,

CREATE TABLE IF NOT EXISTS personal_config (
    config_id INT(10) NOT NULL AUTO_INCREMENT, 
    last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    configuration TEXT(25600) NOT NULL, 
    PRIMARY KEY (config_id), FOREIGN KEY 
(config_id) REFERENCES user(personal_config) 
)ENGINE=InnoDB DEFAULT CHARSET=utf8; 
관련 문제