初学数据库 遇到小问题 要交作业了 帮忙!!!
drop table score;
drop table students;
drop table lessons;
drop table classes;
drop table course;
drop table teacher;
create table teacher
(
教师编号varchar(6)NOT NULL,
姓名varchar(8)NOT NULL,
性别varchar(4),
授课课程varchar(16),
工作年龄number(3),
出生日期date,
民族varchar(12),
工资number(6),
constraint pk_teacher primary key (教师编号),
constraint teacher_sex check (性别='M' or 性别='F')
);
create table course
(
课程名称varchar(20)NOT NULL,
课程编号varchar(15)NOT NULL,
学分number(2,1),
教师编号varchar(5),
先修课程编号varchar(5),
constraint pk_course primary key (课程编号)
);
create table classes
(
班级编号number(20)NOT NULL,
班级名称varchar(20)NOT NULl,
所属学院varchar(20),
人数number(2),
constraint pK_class primary key (班级编号)
);
create table lessons
(
课程编号varchar(5)NOT NULL,
教师编号varchar(5)NOT NULL,
课程名称varchar(16)NOT NULL,
班级编号number(20)NOT NULL,
学院名称varchar(20),
学分number(2,1),
入学年份date,
开设课程专业varchar(16),
constraint pk_lesson primary key (课程编号,教师编号,班级编号),
constraint to_teacher foreign key (教师编号) references teacher (教师编号),
constraint to_course foreign key (课程编号) references course (课程编号),
constraint to_class foreign key (班级编号) references classes (班级编号)
);
create table students
(
学号varchar(12)NOT NULL,
姓名varchar(10)NOT NULL,
性别varchar(4),
班级编号number(20),
出生日期 date,
学院名称varchar(20),
constraint pk_students primary key (学号),
constraint to_classes foreign key (班级编号) references classes (班级编号),
constraint chk_students_sex check (性别='M' or 性别='F')
);
create table score
(
学号varchar(12)NOT NULL,
姓名varchar(10),
性别varchar(4),
成绩number(4,1),
学院varchar(20),
课程编号varchar(5),
constraint pk_score primary key (学号),
constraint to_student foreign key (学号) references students (学号),
constraint to_couses foreign key (课程编号) references course (课程编号),
constraint chk_score_sex check (性别='M' or 性别='F')
);
insert into teacher
values('00000','刘云冰','M','高等数学',25,'27-6月-66','汉',5600);
insert into teacher
values('00002','李顺新','M','C++程序设计',21,'5-4月-69','汉',3600);
insert into teacher
values('00003','汪亚玲','F','数据库软件实践',21,'6-3月-73','汉',7200);
insert into classes
values(3011002,'软件工程2班','计算机科学与技术',36);
insert into classes
values(3011001,'软件工程1班','计算机科学与技术',35);
insert into classes
values(3011003,'软件工程3班','计算机科学与技术',37);
insert into course
values('高等数学','00000',3.5,'20100','20140');
insert into course
values('程序设计基础','00001',2,'20101','20141');
insert into course
values('数据库软件实践','00003',2,'20102','20142');
insert into lessons
values('00000','20140','高等数学',3011002,'计算机科学与技术',3.5,'1-9月-2010','软件工程系');
insert into lessons
values('00001','20141','程序设计基础',3011002,'计算机科学与技术',2,'1-9月-2010','软件工程系');
insert into students
values('201013138061','欧阳实普','M',3011002,'1-9月-2010','计算机科学与技术');
insert into students
values('201013138062','陈知行','M',3011002,'1-9月-2010','计算机科学与技术');
insert into students
values('201013138063','刘少华','M',3011002,'1-9月-2010','计算机科学与技术');
insert into score
values('201013138063','刘少华','M',555,'计算机科学与技术',00000);
insert into score
values('201013138061','欧阳实普','M',598,'计算机科学与技术',00000);
错误:
第 1 行出现错误:
ORA-02291: 违反完整约束条件 (RJ201013138063.TO_COUSES) - 未找到父项关键字
SQL> insert into score
2 values('201013138061','欧阳实普','M',598,'计算机科学与技术',00000)
insert into score
*
第 1 行出现错误:
ORA-02291: 违反完整约束条件 (RJ201013138063.TO_COUSES) - 未找到父项关键字
SQL> insert into lessons
2 values('00000','20140','高等数学',3011002,'计算机科学与技术',3.5,'1-9月-2010','软件工程系');
insert into lessons
*
第 1 行出现错误:
ORA-02291: 违反完整约束条件 (RJ201013138063.TO_TEACHER) - 未找到父项关键字
SQL> insert into lessons
2 values('00001','20141','程序设计基础',3011002,'计算机科学与技术',2,'1-9月-2010','软件工程系');
insert into lessons
*
第 1 行出现错误:
ORA-02291: 违反完整约束条件 (RJ201013138063.TO_TEACHER) - 未找到父项关键字
求解释 详细 最好是你已经解决了 因为要到机房才能用数据库
谢谢了 到机房的机会很少很少 因为我本来在一个很小气的学校!!!
[解决办法]
你最好都执行两次应该就可以了。 你这个是有主外键关联。
鉴于你现在可能不是懂主外键关联。
你就多执行几次
- SQL code
insert into teachervalues('00000','刘云冰','M','高等数学',25,'27-6月-66','汉',5600);insert into teachervalues('00002','李顺新','M','C++程序设计',21,'5-4月-69','汉',3600);insert into teachervalues('00003','汪亚玲','F','数据库软件实践',21,'6-3月-73','汉',7200);insert into classesvalues(3011002,'软件工程2班','计算机科学与技术',36);insert into classesvalues(3011001,'软件工程1班','计算机科学与技术',35);insert into classesvalues(3011003,'软件工程3班','计算机科学与技术',37);insert into coursevalues('高等数学','00000',3.5,'20100','20140');insert into coursevalues('程序设计基础','00001',2,'20101','20141');insert into coursevalues('数据库软件实践','00003',2,'20102','20142');insert into lessonsvalues('00000','20140','高等数学',3011002,'计算机科学与技术',3.5,'1-9月-2010','软件工程系');insert into lessonsvalues('00001','20141','程序设计基础',3011002,'计算机科学与技术',2,'1-9月-2010','软件工程系');insert into studentsvalues('201013138061','欧阳实普','M',3011002,'1-9月-2010','计算机科学与技术');insert into studentsvalues('201013138062','陈知行','M',3011002,'1-9月-2010','计算机科学与技术');insert into studentsvalues('201013138063','刘少华','M',3011002,'1-9月-2010','计算机科学与技术');
[解决办法]
未找到父项关键字是因为你定义了外键
以insert into score 为例子
你在score表中定义了两个外键
constraint to_student foreign key (学号) references students (学号),
constraint to_couses foreign key (课程编号) references course (课程编号),
所以 往score表中插入数据时,必须保证学号在学生表中有记录 课程号在课程表中有记录
否则就会报违反完整性约束的错误
还有 你的建表语句太混乱 看不懂
[解决办法]
[解决办法]
- SQL code
create table teacher( 教师编号 varchar(6) NOT NULL, 姓名 varchar(8) NOT NULL, 性别 varchar(4), 授课课程 varchar(16), 工作年龄 number(3), 出生日期 date, 民族 varchar(12), 工资 number(6), constraint pk_teacher primary key (教师编号), constraint teacher_sex check (性别='M' or 性别='F'));create table course( 课程名称 varchar(20) NOT NULL, 课程编号 varchar(15) NOT NULL, 学分 number(2,1), 教师编号 varchar(5), 先修课程编号 varchar(5), constraint pk_course primary key (课程编号));create table classes( 班级编号 number(20) NOT NULL, 班级名称 varchar(20) NOT NULl, 所属学院 varchar(20), 人数 number(2), constraint pK_class primary key (班级编号));create table lessons( 课程编号 varchar(5) NOT NULL, 教师编号 varchar(5) NOT NULL, 课程名称 varchar(16) NOT NULL, 班级编号 number(20) NOT NULL, 学院名称 varchar(20), 学分 number(2,1), 入学年份 date, 开设课程专业 varchar(16), constraint pk_lesson primary key (课程编号,教师编号,班级编号), constraint to_teacher foreign key (教师编号) references teacher (教师编号), constraint to_course foreign key (课程编号) references course (课程编号), constraint to_class foreign key (班级编号) references classes (班级编号));create table students( 学号 varchar(12) NOT NULL, 姓名 varchar(10) NOT NULL, 性别 varchar(4), 班级编号 number(20), 出生日期 date, 学院名称 varchar(20), constraint pk_students primary key (学号), constraint to_classes foreign key (班级编号) references classes (班级编号), constraint chk_students_sex check (性别='M' or 性别='F'));create table score( 学号 varchar(12) NOT NULL, 姓名 varchar(10), 性别 varchar(4), 成绩 number(4,1), 学院 varchar(20), 课程编号 varchar(5), constraint pk_score primary key (学号), constraint to_student foreign key (学号) references students (学号), constraint to_couses foreign key (课程编号) references course (课程编号), constraint chk_score_sex check (性别='M' or 性别='F'));insert into teachervalues('00000','刘云冰','M','高等数学',25,'27-6月-66','汉',5600);insert into teachervalues('00002','李顺新','M','C++程序设计',21,'5-4月-69','汉',3600);insert into teachervalues('00003','汪亚玲','F','数据库软件实践',21,'6-3月-73','汉',7200);insert into classesvalues(3011002,'软件工程2班','计算机科学与技术',36);insert into classesvalues(3011001,'软件工程1班','计算机科学与技术',35);insert into classesvalues(3011003,'软件工程3班','计算机科学与技术',37);insert into coursevalues('高等数学','00000',3.5,'20100','20140');insert into coursevalues('程序设计基础','00001',2,'20101','20141');insert into coursevalues('数据库软件实践','00003',2,'20102','20142');----出错语句:向lessons表中添加数据时--错误提示:ORA-02291: integrity constraint (YEEXUN.TO_TEACHER) violated - parent key not found--这里指向约束TO_TEACHER,说明此约束没有在他参照的父表中找到相应的记录insert into lessonsvalues('00000','20140','高等数学',3011002,'计算机科学与技术',3.5,'1-9月-2010','软件工程系');--20140这个教师编号是参照teacher表的,你的teacher表里面没有此编号的教师所以出错了
[解决办法]
其实看起来还是数据插入顺序的问题没搞清楚,直接给你贴正确的代码你也可能不知道为什么要那么做。总之对于主键外键,一个必然的原则就是如果你想在表A的X列上创建关联到B表Y列的外键,那么Y列就是父键,没有父,哪有子,所以你需要先把对应的数据在B表中插入,然后再去A表中插入。
