我正在尝试将unique 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_001
。tagsinblog
,CONSTRAINTtagsinblog_ibfk_2
外键(id_word
)参考tagwords
(id_word
))
当我尝试在没有唯一约束的同一个表中插入时,我没有任何问题。
答案 0 :(得分: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;
更改表tagsInBlog
ALTER TABLE tagsinblog ADD UNIQUE tagBlogConstraint (id_word, id_page);
以下插入语句正常
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`))
所以请确保在所有表格中都有正确的条目。
希望它有所帮助!