【发布时间】:2016-05-23 23:01:27
【问题描述】:
我正在尝试添加具有 2 列的外键。
这里是引用外键的表的 DDL:
CREATE TABLE IF NOT EXISTS `sf_file_category` (
`id_file_category` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45)
CHARACTER SET 'latin1'
COLLATE 'latin1_general_ci' NOT NULL,
`file_type` ENUM('document', 'image', 'video', 'archive')
CHARACTER SET 'latin1'
COLLATE 'latin1_general_ci' NULL,
`id_file_category_parent` INT UNSIGNED NULL,
PRIMARY KEY (`id_file_category`),
INDEX `fk_sf_file_category_sf_file_category1_idx` (`id_file_category_parent` ASC),
INDEX `fk_sf_file_category_sf_file_idx` (`id_file_category` ASC, `file_type` ASC)
)
ENGINE = InnoDB;
拥有外键的表的DDL:
CREATE TABLE IF NOT EXISTS `sf_file` (
`id_file` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`fullpath` VARCHAR(100)
CHARACTER SET 'latin1'
COLLATE 'latin1_general_ci' NOT NULL,
`basename` VARCHAR(45)
CHARACTER SET 'latin1'
COLLATE 'latin1_general_ci' NOT NULL,
`accesskey` CHAR(8)
CHARACTER SET 'latin1'
COLLATE 'latin1_general_ci' NOT NULL,
`file_type` ENUM('document', 'image', 'video', 'archive')
CHARACTER SET 'latin1'
COLLATE 'latin1_general_ci' NULL,
`name` VARCHAR(45)
CHARACTER SET 'latin1'
COLLATE 'latin1_general_ci' NULL,
`description` VARCHAR(255)
CHARACTER SET 'latin1'
COLLATE 'latin1_general_ci' NULL,
`id_aircraft_image` SMALLINT UNSIGNED NULL,
`id_aircraft` SMALLINT UNSIGNED NULL,
`id_file_category` INT UNSIGNED NULL,
PRIMARY KEY (`id_file`),
INDEX `fk_sf_file_sf_file_category1_idx` (`id_file_category` ASC, `file_type` ASC),
INDEX `fk_sf_file_sf_aircraft1_idx` (`id_aircraft` ASC),
INDEX `fk_sf_file_sf_aircraft2_idx` (`id_aircraft_image` ASC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_general_ci;
尝试执行以下外键语法:
ALTER TABLE `sf_file`
ADD CONSTRAINT `fk_sf_file_sf_file_category1`
FOREIGN KEY (`id_file_category` , `file_type`)
REFERENCES `sf_file_category` (`id_file_category` , `file_type`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
但我收到此错误: 错误:错误 1822:添加外键约束失败。引用表“sf_file_category”中的约束“fk_sf_file_sf_file_category1”缺少索引。
我假设他的意思是已经在表 sf_file_category 中创建的 INDEX fk_sf_file_sf_file_category1_idx (id_file_category ASC, file_type ASC)。
有没有什么特别的方法可以创建我缺少的多字段外键?
【问题讨论】:
-
在我这边执行没有任何问题。
-
字段类型及其排序规则应匹配
-
@GiorgosBetsos 您最终使用了哪个工具?尝试了这个唯一的语句,但仍然得到“[HY000][1215] 无法添加外键约束”...
-
我使用的是 MySQL Workbench 6.3,而服务器版本是 5.6.26
标签: mysql foreign-keys