2015-04-10 5 views
0

У меня есть две таблицы и попытаться создать ограничение внешнего ключа, и я получаю сообщение об ошибке:Внешняя ошибка ключ на MySQL

[SQL] ALTER TABLE `defectstdreference` 
ADD CONSTRAINT `Relationship72` FOREIGN KEY (`improve_notice_doc_id`, `defect_id`, `client_id`) REFERENCES `improvementnoticedefect` (`doc_id`, `defect_id`, `client_id`); 
[Err] 1215 - Cannot add foreign key constraint 

Вот мои таблицы:

CREATE TABLE `improvementnoticedefect` (
    `defect_id` int(11) NOT NULL, 
    `doc_id` bigint(20) NOT NULL, 
    `client_id` bigint(20) NOT NULL, 
    `description` varchar(20000) NOT NULL, 
    PRIMARY KEY (`defect_id`,`doc_id`,`client_id`), 
    KEY `Relationship68` (`doc_id`,`client_id`), 
    CONSTRAINT `Relationship68` FOREIGN KEY (`doc_id`, `client_id`) REFERENCES `improvementnotice` (`doc_id`, `client_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Второй:

CREATE TABLE `defectstdreference` (
    `reference_id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `std_doc_id` bigint(20) NOT NULL, 
    `improve_notice_doc_id` bigint(20) NOT NULL, 
    `defect_id` int(11) NOT NULL, 
    `paragraph` varchar(4000) NOT NULL, 
    `client_id` bigint(20) NOT NULL, 
    PRIMARY KEY (`reference_id`), 
    KEY `Relationship70` (`std_doc_id`), 
    CONSTRAINT `Relationship70` FOREIGN KEY (`std_doc_id`) REFERENCES `std` (`doc_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

И запрос на добавление внешних ключей:

ALTER TABLE `defectstdreference` 
ADD CONSTRAINT `Relationship72` FOREIGN KEY (`improve_notice_doc_id`, `defect_id`, `client_id`) REFERENCES `improvementnoticedefect` (`doc_id`, `defect_id`, `client_id`); 

Фактически этот запрос выполняется SymmetricDS с помощью драйвера mysql jdbc.

Любая помощь приветствуется

+0

'ЛИТЕРАТУРЫ improvementnoticedefect (doc_id, defect_id, client_id)' в 'improvementnoticedefect' таблице вы объявляете ключ как' PRIMARY KEY (defect_id, DOC_ID, CLIENT_ID) ', который имеет поля в другом порядке. попробуйте привести их в порядок –

+0

Да, это сработало! – SMSk

+0

oh отлично. я просто попробовал это и получил аналогичную ошибку, поэтому добавил это как ответ, а –

ответ

0

Я подозреваю, что это может быть потому, что поля в вашей внешней статье ключевые ссылки упорядочены по-разному к первичному ключу. Пример:

mysql> create table pk (id1 integer, id2 integer, id3 integer, primary key(id1, id2, id3)); 
Query OK, 0 rows affected (0.10 sec) 

mysql> create table fk (id1 integer, id2 integer, id3 integer, foreign key(id1, id2, id3) references pk(id2, id1, id3)); 
ERROR 1005 (HY000): Can't create table 'test.fk' (errno: 150) 
mysql> create table fk (id1 integer, id2 integer, id3 integer, foreign key(id1, id2, id3) references pk(id1, id2, id3)); 
Query OK, 0 rows affected (0.09 sec)