2013-07-04 4 views
0

테이블 :외래 키 제약 조건을이 방법으로 추가 할 수없는 이유는 무엇입니까?

CREATE TABLE `relation` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(40) NOT NULL, 
    `gender` tinyint(1) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `unique_relation` (`name`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 

    CREATE TABLE `invite` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `date_sent` date NOT NULL, 
    `user_id` int(10) unsigned NOT NULL, 
    `relation_id` int(10) unsigned NOT NULL, 
    `email` varchar(255) NOT NULL, 
    `code` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `fk_user` (`user_id`), 
    CONSTRAINT `fk_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 

SQL 문 실행했다 :

ALTER TABLE `invite` 
ADD CONSTRAINT `fk_relation` 
FOREIGN KEY (`relation_id`) 
REFERENCES `relation` (`id`) 
ON DELETE CASCADE ON UPDATE RESTRICT 

MySQL의 오류 : invite.relation_을 relation.id

SQLSTATE[HY000]: General error: 1005 Can't create table 'dbtest.#sql-d00_39' (errno: 121).

ID 열은 테이블이 키를 첨가하면서 비어 초대 부호 동류 INT (10)

UPDATE 의이다. 테이블 관계에 3 개의 행이 있습니다.

ALTER TABLE invite 
ADD CONSTRAINT fk_relation 
FOREIGN KEY (relation_id) 
REFERENCES relation(id) 

의 DoC 구문에 따라 자동으로 현재 외래 키 생성을위한 SQL FOREIGN KEY Constraint

+0

는, 테이블이 비어 초대 :

는이 시도? –

답변

1

이 시도. 그러나 "삭제"의 경우 유효한 T-SQL 문인 것으로 나타나지 않는 "ON DELETE RESTRICT"문이 포함됩니다.

사실

ALTER TABLE invite WITH CHECK ADD CONSTRAINT fk_relation FOREIGN KEY (relation_id) REFERENCES relation (id)

+0

내 anwser 업데이트했습니다 –

+0

backticks없이 일하고있는 것 같습니다. –

0

DDL을 올바른 "업데이트"를 "삭제"에 대한 작업을 지정하는 문장을 포함