外键是在从表里设置还是在主表里设置的
首先我要说的是外键是在从本表 也就是你说的表里设置的.
主外键肯定是有联系的,因为如果你建了两张表
Student_info和Student_numeric
学生信息表和学生成绩表
现在说如果有个学生不读书了 我们就肯定要在学生信息表里删除这个学生的信息,在学生信息表里面,包括他的 ID , Name , Adderss 等的信息,就是说在学生信息表里面删除这个学生,那么在学生成绩表里面呢,这个学生不存在了,在学生成绩表里面还有这个学生的成绩,肯定是不行的,肯定要级联的删除了,这里就要用到级联删除了,否则就说不过去了.
还有就是用主外键可以使各个表连接起来而不至于是零散的,你如果用的是SQLServer的话在企业管理器里的视图里就可以看到他们的关系了,整个表是连接起来的 一看就把各个表之间的关系搞清楚了.
外键是用来控制数据库中数据的数据完整性的
就是当你对一个表的数据进行操作
和他有关联的一个或更多表的数据能够同时发生改变
这就是外键的作用
外键属性当然是可以去掉的,如果你不想再用这种约束,对编程当然不会有什么影响,但相应的录入数据的时候就不对录入的数据进行“参照完整性”检查了。
例如有两个表
A(a,b) :a为主键,b为外键(来自于B.b)
B(b,c,d) :b为主键
如果我把字段b的外键属性去掉,对编程没什么影响。
如上面,A中的b要么为空,要么是在B的b中存在的值,有外键的时候,数据库会自动帮你检查A的b是否在B的b中存在。
1、外建表达的是参照完整性:这是数据固有的,与程序无关。因此,应该交给DBMS来做。
如果在 publishers 表中删除一个出版商,而这个出版商的 ID 在 titles 表中记录书的信息时使用了.
则这两个表之间关联的完整性将被破坏,titles 表中该出版商的书籍因为与 publishers 表中的数据没有链接而变得孤立了 FOREIGN KEY 约束防止这种情况的发生.
如果主键表中数据的更改使之与外键表中数据的链接失效(即上面的数据孤立了的情况),则这种更改(删除)是不能实现的,从而确保了引用完整性。
如果试图删除主键表中的行或更改主键值,而该主键值与另一个表的 FOREIGN KEY 约束值(即上表中的主键)相关,则该操作不可实现