我有一个与sql语言相关的问题。我试图将auto_increment特性添加到具有主键属性的预先存在的行中。我回来的是:
错误代码:1833年。无法更改列'ODB_ID':用于表'test3.target'的外键约束中。
表中使用的语句是
CREATE TABLE `Receptor` (
`ODB_ID` int(11) NOT NULL,
`Name` varchar(10) NOT NULL,
`Older Name` varchar(10) NOT NULL,
`Uniprot_ID` varchar(10) NOT NULL,
`Organism` enum('H','M','R') NOT NULL,
`Sequence` varchar(1000) NOT NULL,
PRIMARY KEY (`ODB_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci这张表指的是这个:
CREATE TABLE `Target` (
`Pubchem_ID` int(11) NOT NULL,
`ODB_ID` int(11) NOT NULL,
`Receptor` varchar(10) NOT NULL,
`EC50` decimal(6,3) DEFAULT NULL,
`Reference_ID` int(11) NOT NULL,
KEY `Pubchem_ID` (`Pubchem_ID`),
KEY `ODB_ID` (`ODB_ID`),
KEY `Reference_ID` (`Reference_ID`),
CONSTRAINT `target_ibfk_1` FOREIGN KEY (`Pubchem_ID`) REFERENCES `general` (`Pubchem_ID`),
CONSTRAINT `target_ibfk_2` FOREIGN KEY (`ODB_ID`) REFERENCES `receptor` (`ODB_ID`),
CONSTRAINT `target_ibfk_3` FOREIGN KEY (`Reference_ID`) REFERENCES `publication` (`Reference_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci我尝试了以下命令,以及来自MySQL gui的命令:
alter table `Receptor` MODIFY `ODB_ID` int not null auto_increment PRIMARY KEY;alter table `Receptor` CHANGE `ODB_ID` `ODB_ID` int not null auto_increment PRIMARY KEY;我在网站上看到了另一个建议,但这对我不起作用。
提前谢谢你。
发布于 2020-02-06 17:33:14
您需要禁用FOREIGN_KEY_CHECKS。然后在操作之后再次启用它。以下几点对我来说是可行的:
set session foreign_key_checks = 0;
alter table `Receptor` MODIFY `ODB_ID` int not null auto_increment;
set session foreign_key_checks = 1;请参阅演示
注意,我还在auto_increment之后删除了ODB_ID,因为ODB_ID已经是PRIMARY KEY了。
发布于 2020-02-06 17:24:39
ALTER TABLE Receptor MODIFY COLUMN ODB_ID INT AUTO_INCREMENT;我认为auto_increment列必须是主键或唯一键的一部分,因此如果不起作用,请尝试:
ALTER TABLE Receptor MODIFY COLUMN ODB_ID INT AUTO_INCREMENT PRIMARY KEY;https://stackoverflow.com/questions/60100041
复制相似问题