如何修改外键或主键列的数据类型?

时间:2014-06-21 16:58:14

标签: mysql sql

我有三张桌子。一个是课程部分,另一个是先决条件

CREATE TABLE course(
  course_number int(11) NOT NULL AUTO_INCREMENT,
  course_name varchar(20) NOT NULL,
  credit_hours int(11) NOT NULL,
  department varchar(5) NOT NULL,
  PRIMARY KEY (course_number)
)

CREATE TABLE section (
  section_id int(11) NOT NULL,
  course_number` int(11) NOT NULL,
  semester varchar(6) NOT NULL,
  year year(4) NOT NULL,
  instructor varchar(20) DEFAULT NULL,
  PRIMARY KEY (section_id),
  FOREIGN KEY (course_number) REFERENCES course (course_number)
) 
create table prerequisite(
    course_number int not null auto_increment,
    prerequisite int not null,
    primary key (course_number),
    foreign key (prerequisite) references course(course_number)
    );

我想在两个表中更改course_number的数据类型,但是当我运行查询时

alter table course change course_number course_number varchar(20);

我看到以下错误:

  

无法更改列'course_number':在表'university.section'的外键约束'section_fk'中使用

这里有什么问题?什么是最好的解决方案?通过说出最好的解决方案,我的意思是,不要丢失任何数据或放弃任何表格并从头开始创建。

1 个答案:

答案 0 :(得分:1)

删除外键,更改两个表并添加外键。明确命名约束是个好主意。现在,您必须查找目录中约束名称的内容:

select CONSTRAINT_NAME from information_schema.REFERENTIAL_CONSTRAINTS
where TABLE_NAME = 'prerequisite'
  and REFERENCED_TABLE_NAME = 'course'

alter table prerequisite drop constraint ...;

alter table course change course_number course_number varchar(20);
alter table prerequisite change course_number course_number varchar(20);

alter table prerequisite add constraint <name>
    foreign key (course_number)
    references course (course_number)
        <actions>;