2012-03-01 118 views
3

我有一个具有表集合的mysql数据库一个表具有作为主键和单个外键的组合键。以下是表格定义。更改在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) 

我这是在互联网上找到,但不能妥善解决这几个答案尝试。有人可以帮助我做到这一点。提前致谢。

回答

3

尝试先删除外键,这样的事情:

ALTER TABLE `ohrm_emp_education` DROP FOREIGN KEY `emp_number`; 
ALTER TABLE `ohrm_emp_education` DROP FOREIGN KEY `education_id`; 

然后改变表。

+0

它与我合作。谢谢您的帮助。 – Thilanka 2012-03-01 08:37:24

1

如果您的表使用InnoDB引擎,则通常会出现此错误。在这种情况下,您必须删除外键,然后执行alter table并删除该列。

+0

谢谢。这个对我有用。 – Thilanka 2012-03-01 08:59:07

1

删除/禁用外键约束。删除主键,添加新的PK,启用/添加fk。

3

如果您正在使用SQL Server Management Studio。
然后右键单击表格并单击设计。 然后右键单击包含复合键 的行,然后单击删除主键 ,然后添加新列 并将数据插入该列 并检查该列是否没有空数据。

然后再去设计所要求的列视图 ,然后右击并作为主键

大功告成点击设置!

+0

感谢您的快速回复。我正在寻找一种方法,我们可以使用纯sql命令,而不是使用ui。我通过首先删除外键来获得答案。 – Thilanka 2012-03-01 08:35:48