我有三张桌子。一个是课程,部分,另一个是先决条件。
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'中使用
这里有什么问题?什么是最好的解决方案?通过说出最好的解决方案,我的意思是,不要丢失任何数据或放弃任何表格并从头开始创建。
答案 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>;