外键列的唯一约束
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 tagswords
和 archive
中有各自的条目
但是,如果您尝试插入任何值作为 foreign key
,而 tables 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`))
因此请确保您在所有 table.
中都有正确的条目
希望对您有所帮助!
我正在尝试将 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
, CONSTRAINTtagsinblog_ibfk_2
FOREIGN KEY (id_word
) REFERENCEStagwords
(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 tagswords
和 archive
但是,如果您尝试插入任何值作为 foreign key
,而 tables 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`))
因此请确保您在所有 table.
中都有正确的条目希望对您有所帮助!