数据库
首页 > 数据库> > 如何更新mysql数据库中的外键值

如何更新mysql数据库中的外键值

作者:互联网

我有三个表:类别,语言和categories_languages. Categories_languages是多对多的表格,它们将类别和语言联系在一起.我想更新表语言中的foregin键值,但它会抛出错误#1451 – 无法删除或更新父行:外键约束失败!

CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `name` varchar(20) NOT NULL,
  `modified` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`id`),
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `languages` (
  `id` char(2) NOT NULL,
  `name` varchar(20) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `categories_languages` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `category_id` int(11) unsigned NOT NULL,
  `language_id` char(2) NOT NULL,
  `translation` varchar(20) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `fk_category_id_language_id` (`category_id`,`language_id`),
  KEY `fk_language_id` (`language_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;

ALTER TABLE `categories_languages`
  ADD CONSTRAINT `categories_languages_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `categories_languages_ibfk_2` FOREIGN KEY (`language_id`) REFERENCES `languages` (`id`) ON DELETE CASCADE;

错误对我来说很清楚,但在这种情况下如何更新键值?我尝试添加ON UPDATA CASCADE:

ALTER TABLE `categories_languages`
  ADD CONSTRAINT `categories_languages_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `categories_languages_ibfk_2` FOREIGN KEY (`language_id`) REFERENCES `languages` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

但这也失败了消息:MySQL说:文档#1005 – 无法创建表’./ db_dodo / #sql-c2f_80e6f.frm'(错误号:121)

解决方法:

您可以暂时暂停外键检查:

SET foreign_key_checks = 0;
UPDATE languages SET id='xyz' WHERE id='abc';
UPDATE categories_languages SET language_id='xyz' WHERE language_id='abc';
SET foreign_key_checks = 1;

编辑:至于外键问题:是存储在本地或远程文件系统上的数据? errno 121是EREMOTEIO(远程I / O错误).也许目标文件系统存在权限问题,或者它不支持文件名中的#字符?

标签:mysql,many-to-many,foreign-keys
来源: https://codeday.me/bug/20191004/1851673.html