我有一个具有一组表的mysql数据库一个表有一个复合键作为主键和一个外键。以下是表定义。
CREATE TABLE IF NOT EXISTS `ohrm_emp_education` (
`emp_number` int(11) NOT NULL,
`education_id` int(11) NOT NULL,
`institute` varchar(100) DEFAULT NULL,
`major` varchar(100) DEFAULT NULL,
`year` decimal(4,0) DEFAULT NULL,
`score` varchar(25) DEFAULT NULL,
`start_date` date DEFAULT NULL,
`end_date` date DEFAULT NULL,
PRIMARY KEY (`emp_number`,`education_id`),
KEY `education_id` (`education_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `ohrm_emp_education`
ADD CONSTRAINT `ohrm_emp_education_ibfk_1` FOREIGN KEY (`emp_number`) REFERENCES `hs_hr_employee` (`emp_number`) ON DELETE CASCADE,
ADD CONSTRAINT `ohrm_emp_education_ibfk_2` FOREIGN KEY (`education_id`) REFERENCES `ohrm_education` (`id`) ON DELETE CASCADE;
但是现在我需要在这个现有表中添加一个新列并将其作为主键。我用以下查询尝试了它。
ALTER TABLE ohrm_emp_education
ADD column id int not null AUTO_INCREMENT,
DROP PRIMARY KEY,
ADD primary key (id)
但它显示以下错误
#1025 - Error on rename of './test/#sql-4f6_19b' to './test/ohrm_emp_education' (errno: 150)
我尝试了几个在互联网上找到的答案,但无法正确解决。有人可以帮我这个。提前致谢。
答案 0 :(得分:3)
首先尝试删除外键,如下所示:
ALTER TABLE `ohrm_emp_education` DROP FOREIGN KEY `emp_number`;
ALTER TABLE `ohrm_emp_education` DROP FOREIGN KEY `education_id`;
然后改变表格。
答案 1 :(得分:3)
如果您使用的是SQL Server Management Studio 然后右键单击表格并单击设计。 然后右键单击包含复合键的行 然后单击“删除主键” 然后添加新列 并将数据插入该列 并检查该列是否没有空数据。
然后再去设计视图 并右键单击所需的列,然后单击“设置为主键”
你做完了!!
答案 2 :(得分:1)
如果您的表使用InnoDB引擎,通常会出现此错误。在这种情况下,您必须删除外键,然后执行alter table并删除列。
答案 3 :(得分:1)
删除/禁用外键约束。删除主键,添加新PK,启用/添加fk。