有两个表新闻和语言。 这是MySQL中的原始表:
CREATE TABLE `news` (
`news_id` int(11) NOT NULL AUTO_INCREMENT,
`fleet_id` int(11) NOT NULL,
`channel_id` int(11) NOT NULL,
`effective_from` date NOT NULL,
`effective_to` date NOT NULL,
`news` text,
PRIMARY KEY (`news_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `language` (
`ietf_language_tag` varchar(5) NOT NULL,
`endonym` varchar(32) NOT NULL,
`exonym` varchar(32) NOT NULL,
PRIMARY KEY (`ietf_language_tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/ *发出alter table命令* /
ALTER TABLE news
ADD ietf_language_tag varchar(5) NOT NULL,
ADD KEY (ietf_language_tag) ,
ADD CONSTRAINT news_fkey1 FOREIGN KEY (ietf_language_tag) REFERENCES
language(ietf_language_tag) ON DELETE NO ACTION ON UPDATE NO ACTION ;
/ *收到错误* /
错误:
14:57:51 ALTER TABLE news ADD ietf_language_tag varchar(5)NOT NULL,ADD KEY
(ietf_language_tag),ADD CONSTRAINT news_fkey1 FOREIGN KEY(ietf_language_tag)
REFERENCES语言(ietf_language_tag)ON更新无操作更新无操作
错误代码:1215。无法添加外键约束0.437秒
答案 0 :(得分:0)
news
和language
的{{1}} latin1
,news
的{{1}}字符集utf8
不同。
即使字符集相同,如果您在language
表上有记录,也会出现错误,如下所示。
错误1452(23000):无法添加或更新子行:外键约束失败(
news
。db_name
,CONSTRAINT#sql-296_72a7a
FOREIGN KEY(news_fkey1
)参考ietf_language_tag
(language
)在没有更新动作的情况下删除没有动作)
可以使用ietf_language_tag
SET FOREIGN_KEY_CHECKS = 0;