如果我没有弄错的话你的host表中的公安部门,供电部门 这两个字段分别是police和supply表的外键,也就是这三个表关联,那么你要对host表进行插入的话,比如插入公安部门为“a”,供电部门为"b",那么你的police表中就要先有主键(公安部门)为"a"的这条记录,而且supply表中也要先有主键(供电部门)为“b”的记录,这就是主外键约束。
同理,删除的时候,如果host表中有公安部门为“c”,供电部门为“d”的记录,那么你想删除police表中主键为“c”或者supply为“d”的记录,就会出错,你要先把host中的有关记录删除掉。 修改的时候也是一个道理。
关键字:主外键约束

解决方案 »

  1.   

    问过老师,问题终于解决了,我的那些更新语句有一个逻辑错误:
    where子句的条件应该是:主键=旧的主键值,例如:公安部门=修改前的公安部门名称。
    而我的where子句的条件都是:主键=修改后的主键值,这是错误的。
     
    Host表能更新是因为其主键不允许修改,
    Police和Supply表不能更新是因为我更新时修改了主键值,这样在更新时就检索不到数据库里原有的记录,当然也就更新不成了正确的访求是应该在读取原始记录后,在显示之前,先把原来的主键值保存到一个变量中,更新时在where子句中用此变量作为条件。