加载中…
个人资料
金戈铁马的大大大股东
金戈铁马的大大大股东
  • 博客等级:
  • 博客积分:0
  • 博客访问:281
  • 关注人气:16
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

插入数据时发生违反外键约束怎么办

(2012-03-28 17:47:43)
标签:

it

分类: 数据库

问题:

    按书上P82的图3.2 学生-课程数据库的数据示例(b)的Course表的内容,插入课程号为1的数据时提示违反了外键约束。

    插入语句:insert into course(cno,cname,cpno,ccredit) values('1','数据库','5',4);

分析:

   先根据Course表的定义,看哪一个是外键。

   表定义的SQL语句在P85的例6。

   create table course (cno char(4) primary key,

                        cname char(40),

                        cpno char(4),

                        ccredit smallint,

                        foreign key cpno references course(cno)

                        );

   从上面的SQL语句可以看出,cpno是外键,而且引用的是该表的主键cno。

   根据书上P51的规则2.2,参照完整性规则,外键cpno的取值不为空的情况下(如上cpno='5'),与其对应的主键cno必须存在。因为,第一个插入的就是cno='1'的数据,cno='5'的还没有插入,很显然不满足参照完整性规则。

解决方法:

   第一种解决方法是插入数据的时候,所有的cpno暂时都置为null,所有数据插入以后,再依次更新这些数据的cpno的值。该方法的优点是复杂性低,容易实现。

   第二种解决方法是插入数据的时候,不是按表中cno的顺序插入。而是根据数据依赖的关系插入数据。比如,根据表里的数据,分析得出可以按cno=2、6、4、7、5、1、3的顺序插入数据。

 

   

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有