使用外键约束更改MySQL表

时间:2014-01-17 04:06:25

标签: mysql alter

有两个表新闻和语言。 这是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秒

1 个答案:

答案 0 :(得分:0)

字符集问题

newslanguage的{​​{1}} latin1news的{​​{1}}字符集utf8不同。

FOREIGN_KEY_CHECKS

即使字符集相同,如果您在language表上有记录,也会出现错误,如下所示。

  
    

错误1452(23000):无法添加或更新子行:外键约束失败(newsdb_name,CONSTRAINT #sql-296_72a7a FOREIGN KEY(news_fkey1)参考ietf_language_taglanguage)在没有更新动作的情况下删除没有动作)

  

可以使用ietf_language_tag

修复此问题
SET FOREIGN_KEY_CHECKS = 0;