这学期选修了Oracle数据库,前面两节的课是对以前数据库概念的复习,发现自己学得真是不扎实,很多要点都忘了,在这里记录下,以后自己可以经常看看^_^
这次上课老师提到了关于存在外来码时的更新问题
有这样两张表
Dept
DNO | DNAME | TEL | LOC |
001 | COMPUTER | 3421234 | X701 |
002 | COMM | 1234552 | X901 |
... | ... | ... | ... |
STUDENT
SNO | SNAME | AGE | SEX | DNO |
05001 | ZHANG | 19 | F | 001 |
05002 | LI | 20 | M | 002 |
... | ... | ... | ... | ... |
DNO是Dept的主码,是STUDENT的外来码
然后是三道思考题
1)Delete from dept where dname='Computer';
2)Update dept set dno='100' where dname='Computer';
3)Update student set dno='999' where sno='04109830'
上面这三种操作都会报错,都会破坏student表外来码的参照完整性
解决办法:
如第一题的意思是某学校的计算机系不再开设(悲剧啊),那在这之前先要把student表中这个系的学生都分配到其他院系当中去,然后才能执行delete
第二题是给计算机系重新编号的问题,可以在dept表中增加一个临时项,如“999”,把student表中原来计算机系的学生dno编号都改成“999”,然后再执行update操作,最后再把学生的dno编号改回来。
第三题就是一个计算机系学生转院系的问题,应该要现在dept表中确保有编号‘999’这个系后,再执行update操作。