Tôi có ba bảng: danh mục, ngôn ngữ và danh mục_languages. Danh mục_languages là nhiều đến nhiều bảng liên kết các danh mục và ngôn ngữ với nhau. Tôi muốn cập nhật một giá trị khóa foregin trong ngôn ngữ bảng nhưng nó ném cho tôi lỗi # 1451 - Không thể xóa hoặc cập nhật hàng gốc: ràng buộc khóa ngoài không thành công!Cách cập nhật giá trị khóa ngoài trong cơ sở dữ liệu mysql
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;
Lỗi này rõ ràng với tôi, nhưng làm cách nào để cập nhật giá trị khóa trong trường hợp này? Tôi đã cố gắng thêm 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;
nhưng điều đó cũng không thành công với thông điệp: MySQL nói: Documentation # 1005 - Không thể tạo bảng './db_dodo/#sql-c2f_80e6f.frm' (errno: 121)
gì được truy vấn cập nhật bạn đang chạy mà tạo ra lỗi? – bobwienholt