我不是那么进入数据库而且我有以下问题。我正在使用 MySql
我有一个结果表,由 DDL 声明描述:
CREATE TABLE results (
id BigInt(20) UNSIGNED NOT NULL AUTO_INCREMENT,
sample_id BigInt(20) UNSIGNED NOT NULL,
genus VarChar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
doi NVarChar(128) COLLATE utf8_general_ci,
result NVarChar(2) COLLATE utf8_general_ci NOT NULL,
error Text CHARACTER SET utf8 COLLATE utf8_general_ci,
PRIMARY KEY (
id
)
) ENGINE=InnoDB AUTO_INCREMENT=3 ROW_FORMAT=DYNAMIC DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE results COMMENT = '';
ALTER TABLE results ADD CONSTRAINT fk_results_pgrfas FOREIGN KEY (sample_id)
REFERENCES pgrfas (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
CREATE INDEX fk_results_pgrfas
ON results(sample_id);
正如您在此表中所看到的,定义了一个 FOREIGN KEY constratint将结果表与另一个名为 pgrfas 的表绑定在一起。
我必须删除此foreing键约束,我尝试使用此语句:
alter table results drop foreign key fk_results_pgrfas
但它不起作用,MySql会回复此错误消息:
#42000Can't DROP 'fk_results_pgrfas'; check that column/key exists
有什么问题?我错过了什么?如何正确删除此FK?
编辑1:声明:
SHOW CREATE TABLE results;
返回:
CREATE TABLE `results` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`sample_id` bigint(20) unsigned NOT NULL,
`genus` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`doi` varchar(128) CHARACTER SET utf8 DEFAULT NULL,
`result` varchar(2) CHARACTER SET utf8 NOT NULL,
`error` text CHARACTER SET utf8,
PRIMARY KEY (`id`),
KEY `fk_results_pgrfas` (`sample_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
那意味着什么?已删除?但这部分意味着什么:
KEY `fk_results_pgrfas` (`sample_id`)
答案 0 :(得分:2)
检查结果和pgrfas表:
SELECT * FROM results;
SELECT * FROM pgrfas;
如果可以,请从表中删除值。
运行SHOW CREATE TABLE
并验证正确的外键名称。
删除外键
ALTER TABLE results DROP FOREIGN KEY fk_results_pgrfas;
您创建了一个与外键名称相同的INDEX。
我认为它没有关系,但是如果你有问题,请尝试删除你的索引,然后删除外键。
删除关联的INDEX:
DROP INDEX fk_results_pgrfas ON results;
答案 1 :(得分:1)
根据show create table输出,您没有名为fk_results_pgrfas
的外键constaint。相反,您有一个索引fk_results_pgrfas
。
如果您确实要删除/删除此索引,请运行以下查询。
ALTER TABLE `results` DROP INDEX `fk_results_pgrfas`;
另一方面,您确定已成功执行了以下2个命令吗?因为这两个命令正在为result
表创建重复键。
ALTER TABLE results ADD CONSTRAINT fk_results_pgrfas FOREIGN KEY (sample_id)
REFERENCES pgrfas (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
CREATE INDEX fk_results_pgrfas
ON results(sample_id);
答案 2 :(得分:0)
检查确实存在哪种约束
C::a()
如果存在,最好放弃约束:
SELECT * FROM information_schema.TABLE_CONSTRAINTS WHERE
TABLE_NAME = 'results' AND
CONSTRAINT_NAME = 'fk_results_pgrfas' AND
CONSTRAINT_TYPE = 'FOREIGN KEY'
答案 3 :(得分:0)
你能不能运行SHOW CREATE TABLE结果;确保外键约束的名称并使用您获得的名称运行命令?
ALTER TABLE结果DROP FOREIGN KEY<>