外键列的唯一约束

Unique Constraint on Foreign Key Columns

我正在尝试将 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 ERROR 367421 (could not save new tag data into Mysql): Error 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (sqse_001.tagsinblog, CONSTRAINT tagsinblog_ibfk_2 FOREIGN KEY (id_word) REFERENCES tagwords (id_word))

当我尝试在没有唯一约束的情况下插入相同的 table 时,我没有遇到任何问题。

我研究了你的问题陈述,并假设了以下几点

你的 archive table 可能看起来像这样

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 table 可能看起来像这样

 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

现在您的查询 table 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; 

更改 table 的查询 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');

假设您在 table tagswordsarchive

中有各自的条目

但是,如果您尝试插入任何值作为 foreign key,而 tables archivetagwords 中不存在该值,那么它将抛出以下错误

 #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`)) 

因此请确保您在所有 table.

中都有正确的条目

希望对您有所帮助!