mysql - 更改在mysql中具有外键约束的表主键

标签 mysql sql alter-table mysql-error-1025

我有一个 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)

我尝试了几个在互联网上找到的答案,但无法正确解决。有人可以帮我解决这个问题吗?提前致谢。

最佳答案

首先尝试删除外键,如下所示:

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

然后修改表。

关于mysql - 更改在mysql中具有外键约束的表主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9510971/

相关文章:

Mysql INSERT ...重复键更新,如果值不同,否则删除

javascript - 如何将表的列名存储在 Snowflake 的数组中

java - 如何在获取列名的查询中省略第一个结果?

mariadb - 尝试从表中删除 X 时,表中不存在键列 X

mysql - 调优mysql。 Mysqltuner 推荐

mysql - MYSQL 中的多个 COUNT 与单个列的条件

php - 无需 SSL 的安全身份验证

sql - 从表中选择连续范围

oracle11g - 如何使用alter命令为已经有主键的表定义复合主键?

mysql - 在 `code` 之前更改表添加...?