【问题标题】:Altering a table primary key which has foreign key constrains in mysql在mysql中更改具有外键约束的表主键
【发布时间】:2012-03-01 05:14:19
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    然后修改表。

    【讨论】:

      【解决方案2】:

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

      然后再次转到设计视图 并右键单击所需的列并单击设置为主键

      你已经完成了!

      【讨论】:

      • 感谢您的快速回复。我正在寻找一种我们可以使用纯 sql 命令而不是在 ui 中执行此操作的方法。我设法通过先删除外键来得到答案。
      【解决方案3】:

      如果您的表使用 InnoDB 引擎,您通常会收到此错误。在这种情况下,您必须删除外键,然后执行更改表并删除列。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-02-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多