2015-04-06 2 views
1

Я пытаюсь добавить unique constraint на две внешние ключи:Уникальный Constraint на столбцы внешних ключей

CREATE TABLE tagsInBlog(
    id_tag int(10) not null auto_increment, 
    id_word int(10) not null, 
    id_page int(11), 
    PRIMARY KEY(id_tag), 
    FOREIGN KEY (id_page) REFERENCES archive(id), 
    FOREIGN KEY (id_word) REFERENCES tagwords(id_word) 
)ENGINE=INNODB DEFAULT CHARSET=utf8; 

ALTER TABLE tagsinblog 
    ADD UNIQUE tagBlogConstraint (id_word, id_page); 

При создании я не получаю никаких ошибок, но когда я пытаюсь вставить я получаю:

MYSQL ОШИБКА 367421 (не может сохранить новые данные тегов в Mysql): Ошибка 1452 (23000): Невозможно добавить или обновить дочернюю строку:. внешний ключ ограничение терпит неудачу (sqse_001tagsinblog, скованность tagsinblog_ibfk_2 FOREIGN KEY (id_word) Лит tagwords (id_word))

Когда я пытаюсь вставить в той же таблице без ограничения уникальности у меня нет никаких проблем.

ответ

2

Я работал на вашей постановке задачи и считать несколько вещей, как следовать

вашей archive таблицы может выглядеть следующим образом

CREATE TABLE IF NOT EXISTS `archive` (`id` int(11) NOT NULL AUTO_INCREMENT, 
`descrp` varchar(10) NOT NULL DEFAULT '', PRIMARY KEY (id)) ENGINE=InnoDB 

tagwords таблица может выглядеть следующим образом

CREATE TABLE IF NOT EXISTS `tagwords` (`id_word` int(11) NOT NULL 
AUTO_INCREMENT, `descrp` varchar(10) NOT NULL DEFAULT '', 
PRIMARY KEY (id_word)) ENGINE=InnoDB 

Теперь ваш запрос для таблицы tagsInBlog

CREATE TABLE tagsInBlog(
id_tag int(10) not null auto_increment, 
id_word int(10) not null, 
id_page int(11), 
PRIMARY KEY(id_tag), 
FOREIGN KEY (id_page) REFERENCES archive(id), 
FOREIGN KEY (id_word) REFERENCES tagwords(id_word) 
)ENGINE=INNODB DEFAULT CHARSET=utf8; 

Alter запрос для таблицы tagsInBlog

ALTER TABLE tagsinblog ADD UNIQUE tagBlogConstraint (id_word, id_page); 

После заявления Insert работает отлично

INSERT INTO `test`.`tagsinblog` (`id_tag`, `id_word`, `id_page`) 
VALUES (NULL, '1', '1'), (NULL, '1', '2'); 

если у вас есть соответствующая запись в таблице tagswords и archive

Но если ваша попытка вставить любого значение как foreign key, значение которого не существует в таблицах archive или tagwords, то он будет бросать следующие ошибки

#1452 - Cannot add or update a child row: a foreign key constraint fails 
(`test`.`tagsinblog`, CONSTRAINT `tagsinblog_ibfk_2` 
FOREIGN KEY (`id_word`) REFERENCES `tagwords` (`id_word`)) 

Так Убедитесь, что у вас есть надлежащая запись во всей таблице.

Надеюсь, это поможет!

Смежные вопросы