无法在Maria DB中删除FOREIGN KEY

时间:2016-04-05 06:29:15

标签: mysql sql database foreign-keys mariadb

show create table USERS;   我会得到那个结果。

    CREATE TABLE `USERS` (
  `UR_ID` bigint(20) NOT NULL,
  `DEPT_ID` bigint(20) DEFAULT NULL,
  `DN_ID` bigint(20) NOT NULL,
  `CREATED_BY` varchar(45) NOT NULL,
  `LAST_UPDATED_BY` varchar(45) NOT NULL,
  `LAST_UPDATED_DT` datetime NOT NULL,
  `UR_LOGIN_NAME` varchar(255) NOT NULL,
  `TRANS_ID` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`UR_ID`),
  UNIQUE KEY `Uk11` (`UR_LOGIN_NAME`),
  KEY `SYS_C0018877` (`UR_ID`),
  KEY `SYS_C0018878` (`DEPT_ID`),
  KEY `SYS_C0018879` (`DN_ID`),
  **KEY `SYS_C0018880` (`CREATED_BY`),**
  KEY `SYS_C0018881` (`LAST_UPDATED_BY`),
  KEY `SYS_C0018882` (`LAST_UPDATED_DT`),
  KEY `SYS_C0018883` (`UR_LOGIN_NAME`),
  CONSTRAINT `fk_USERS_2` FOREIGN KEY (`DN_ID`) REFERENCES `DESIGNATION` (`DN_ID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

现在我想删除外键CREATED_BY并运行   ALTER TABLE USERS DROP FOREIGN KEY SYS_C0018880; ERROR 1025(HY000):将'./dbname/USERS'重命名为'./dbname/#sql2-3ea-2c'时出错(错误号:152)

我也用过

ALTER TABLE USERS DROP FOREIGN KEY CREATED_BY;

但我又得到了同样的错误

将'./dbname/USERS'重命名为'./dbname/#sql2-3ea-2c'时出错(错误号:152)

请任何一个分享如何删除此外键,如果可能请分享KEY SYS_C0018880CREATED_BY)。我知道这个密钥是外键,因为在desc table_name上我得到了这个结果;

| DN_ID | bigint(20)|没有| MUL | NULL | | 的 | CREATED_BY | varchar(45)|没有| MUL | NULL | | | LAST_UPDATED_BY | varchar(45)|没有| MUL | NULL | | | LAST_UPDATED_DT | datetime |没有| MUL | NULL |

3 个答案:

答案 0 :(得分:2)

默认情况下,如果您不指定外键名称,MariaDB 会将_ibfk 附加到外键名称。因此,请使用以下代码格式删除您未指定外键名称的外键:

ALTER TABLE table_name DROP FOREIGN KEY foreign_key_ibfk; 

答案 1 :(得分:1)

使用密钥名称而不是外键

 ALTER TABLE USERS DROP KEY SYS_C0018880

答案 2 :(得分:1)

根本原因是数据目录中的文件#sql2-3ea-2c *和/或内部InnoDB字典中具有此类名称的表。这将阻止USERS表上的任何ALTER操作。搜索谷歌“删除孤立的innodb表”以获取指令reg。该