[英]Alter MySQL table with foreign key constraint
有两个表新闻和语言。 这是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新闻添加ietf_language_tag varchar(5)不为空,添加键
(ietf_language_tag),添加约束news_fkey1外键(ietf_language_tag)
参考语言(ietf_language_tag)ON删除无操作更新无操作
错误代码:1215。无法添加外键约束0.437秒
无论news
和language
有不同的字符集latin1
的news
, utf8
的language
。
即使字符集相同,但是如果在news
表上有如下记录,也会出现错误。
错误1452(23000):无法添加或更新子行:外键约束失败(
db_name
。#sql-296_72a7a
,CONSTRAINTnews_fkey1
键(ietf_language_tag
)参考language
(ietf_language_tag
)删除ietf_language_tag
更新不ietf_language_tag
行动
可以通过SET FOREIGN_KEY_CHECKS = 0;
来解决此问题SET FOREIGN_KEY_CHECKS = 0;
mysql> SET FOREIGN_KEY_CHECKS = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> 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 ;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.