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

2023-11-29

我有一个三张桌子。一是course, section其他的是前提条件.

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”中使用

这里有什么问题吗?最好的解决方案是什么?我所说的最佳解决方案是指,不要丢失任何数据或删除任何表并从头开始创建。


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

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>;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何修改外键或主键列的数据类型? 的相关文章

随机推荐