http://blog.csdn.NET/tiantian1980/article/details/1603126

外键是数据库一级的一个完整性约束,就是数据库基础理论书中所说的“参照完整性”的数据库实现方式。   
    
  外键属性当然是可以去掉的,如果你不想再用这种约束,对编程当然不会有什么影响,但相应的录入数据的时候就不对录入的数据进行“参照完整性”检查了。   
    例如有两个表   
  A(a,b)   :a为主键,b为外键(来自于B.b)   
  B(b,c,d)   :b为主键    
  如果我把字段b的外键属性去掉,对编程没什么影响。
  如上面,A中的b要么为空,要么是在B的b中存在的值,有外键的时候,数据库会自动帮你检查A的b是否在B的b中存在。

1、外建表达的是参照完整性:这是数据固有的,与程序无关。因此,应该交给DBMS来做。   
  2、使用外建,简单直观,可以直接在数据模型中体现,无论是设计、维护等回有很大的好处,特别是对于分析现有的数据库的好处时非常明显的--前不久我分析了一个企业现有的数据库,里面的参照完整性约束有的是外键描述,有的是用触发器实现,感觉很明显。当然,文档里可能有,但是也可能不全,但是外键就非常明显和直观。   
  3、既然我们可以用触发器或程序完成的这个工作(指参照完整性约束),DBMS已经提供了手段,为什么我们要自己去做?而且我们做的应该说没有RDBMS做得好。实际上,早期的RDBMS并没有外键,现在都有了,我认为数据库厂商增加这个功能是有道理的。从这个角度来说,外键更方便。   
  4、关于方便,根据我带项目的情况来看,程序员确实有反映,主要是在调试时输入数据麻烦:如果数据可以违反参照完整性,那么就是说参照完整性本身就不对名誉业务冲突,此时也不应该用触发期货程序实现;否则,说明数据是错误的,根本就不应该进入数据库!而且,这也应该是测试系统的一个内容:阻止非法数据。实际上,前台程序应该对这种提交失败做出处理。数据是企业的而非程序的,储程序要尽量与数据分离,反之亦然。

最后说一下,建键几个原则:

1、 为关联字段创建外键。
2、 所有的键都必须唯一。
3、避免使用复合键。
4、外键总是关联唯一的键字段。

http://www.cnblogs.com/ywb-lv/archive/2012/03/12/2391860.html

定义主键和外键主要是为了维护关系数据库的完整性,总结一下:

一、主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。

外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

二、主键、外键和索引的区别

定义:

主键--唯一标识一条记录,不能有重复的,不允许为空

外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值

索引--该字段没有重复值,但可以有一个空值

作用:

主键--用来保证数据完整性

外键--用来和其他表建立联系用的

索引--是提高查询排序的速度

个数:

主键--主键只能有一个

外键--一个表可以有多个外键

索引--一个表可以有多个唯一索引

数据库中外键的作用以及和主键的区别相关推荐

  1. mysql sql外键的作用_SQL的主键和外键的作用

    QL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外键 ...

  2. mysql设置主键的作用_mysql设置主键有什么用

    mysql设置主键的作用是:1.唯一地标识表中的每一行,通过它可强制表的实体完整性:2.主要是用于其他表的外键关联,以及本记录的修改与删除. [相关学习推荐:mysql教程] mysql设置主键的作用 ...

  3. mysql支持UUID做外键_多表外键下将普通的id主键更新为uuid主键

    多表外键下将普通的id主键更新为uuid主键 2019-05-20 02:45:37 来源: 晴天小雨 0 摘要:在多表外键影响和保证数据不删除的前提下,借助Flask-sqlalchemy插件及SQ ...

  4. mybatis主键生成策略和mp主键生成策略

    mybatis主键生成策略和mp主键生成策略 1,mybatis plus 主键生成策略 都是通过给实体类的属性添加注解的方式执行type = IDTYPE- ​ 1,AUTO数据库ID自增 ​ 2, ...

  5. mysql5.7自增长主键_mysql 5.7 使用主键约束

    前言 今天学习一下mysql 主键又称主码,是表中一列或多列的组合.主键约束要求主键的数据唯一,并且不允许为空.主键能够唯一的标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数 ...

  6. java 复合主键,Spring Data Jpa 复合主键的实现

    前言 这次大创有个需求,在数据库建表时发现,user表与project表的关系表 user_project的主键为复合主键: CREATE TABLE user_project( user_id IN ...

  7. oracle主键约束删除,oracle删除主键查看主键约束及创建联合主键

    oracle删除主键查看主键约束及创建联合主键 1,主键的删除 ALTER TABLE TABLENAME DROP PRIMARY_KEY 执行上面的SQL可以删除主键:如果不成功可以用 ALTER ...

  8. mysql主键是非空吗_mysql主键非空约束怎么设置?

    mysql主键约束 主键(PRIMARY KEY)的完整称呼是"主键约束",是 MySQL 中使用最为频繁的约束.一般情况下,为了便于 DBMS 更快的查找到表中的记录,都会在表中 ...

  9. mysql插入报主键冲突,解决方法主键索引重新排序

    mysql插入报主键冲突,解决方法主键索引重新排序 参考文章: (1)mysql插入报主键冲突,解决方法主键索引重新排序 (2)https://www.cnblogs.com/nizuimeiabc1 ...

最新文章

  1. js获取页面url中的各项值
  2. 学习笔记CB006:依存句法、LTP、n元语法模型、N-最短路径分词法、由字构词分词法、图论、概率论...
  3. 什么是pretext tasks?
  4. 云炬随笔20211010(4)
  5. 如何设计实时数据平台(设计篇)
  6. B站up主用AI还原李焕英 动态影像
  7. WebSocket学习
  8. Ant在Java项目中的使用(一眼就看会)
  9. php跨域session共享,PHP中利用COOKIE与SESSION联合实现SESSION跨域
  10. Apollo进阶课程⑪ | Apollo地图生产技术
  11. [delphi]极域学生端解除键盘鼠标锁定退出全屏广播-强制窗口化-源代码
  12. 如何编译sqlite-3.5.9
  13. Delphi使用经验笔记。
  14. java疑难杂症集锦之eclipse(持续更新中)
  15. 跨界 +赋能——互联网的下一个关键词
  16. mapxtreme 常用实例
  17. 几何画板椭圆九种画法_几何画板中椭圆的几种构造方法
  18. 网络传输协议都有什么
  19. VARCHART XGantt 甘特图用程序应该如何交付
  20. excel 多行 取消隐藏_取消隐藏Excel行和列的问题

热门文章

  1. Tomcat启动报错 More than one fragment with the name [spring_web] was found. This is not legal with relat
  2. 保姆级使用PyTorch训练与评估自己的MobileNetV2网络教程
  3. 微信迎来最新改版,做这几款微信插件提高用户体验!
  4. KuaiRec 快手首个稠密为99.6%的数据集 相关介绍、下载、处理、使用方法
  5. linux centos7 解决挖矿病毒kthreaddk 高CPU占用
  6. 任何事,尽量从正面、善意的角度去解读,运气都不会太差
  7. jQuery学习教程二十: jQuery 遍历 - 后代
  8. ubuntu 16.04-设置合上笔记本盖子不休眠
  9. 录屏软件bandicam
  10. 远程桌面连接管理器RDCMan教程