转自:http://www.cnblogs.com/fuland/p/4280434.html

主键和索引是不可少的,不仅可以优化数据检索速度,开发人员还省不其它的工作,

矛盾焦点:数据库设计是否需要外键。这里有两个问题:一个是如何保证数据库数据的完整性和一致性;二是第一条对性能的影响。

正方观点:

1,由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。

eg:数据库和应用是一对多的关系,A应用会维护他那部分数据的完整性,系统一变大时,增加了B应用,A和B两个应用也许是不同的开发团队来做的。他们如何协调保证数据的完整性,而且一年以后如果又增加了C应用呢?

2,有主外键的数据库设计可以增加ER图的可读性,这点在数据库设计时非常重要。

3,外键在一定程度上说明的业务逻辑,会使设计周到具体全面。

反方观点:

1,可以用触发器或应用程序保证数据的完整性

2,过分强调或者说使用主键/外键会平添开发难度,导致表过多等问题

3,不用外键时数据管理简单,操作方便,性能高(导入导出等操作,在insert,   update,   delete   数据的时候更快)

eg:在海量的数据库中想都不要去想外键,试想,一个程序每天要insert数百万条记录,当存在外键约束的时候,每次要去扫描此记录是否合格,一般还不

止一个字段有外键,这样扫描的数量是成级数的增长!我的一个程序入库在3个小时做完,如果加上外键,需要28个小时!

结论:

1,在大型系统中(性能要求不高,安全要求高),使用外键;在大型系统中(性能要求高,安全自己控制),不用外键;小系统随便,最好用外键。

2,用外键要适当,不能过分追求

3,不用外键而用程序控制数据一致性和完整性时,应该写一层来保证,然后个个应用通过这个层来访问数据库。

需要注意的是:MySQL允许使用外键,但是为了完整性检验的目的,在除了InnoDB表类型之外的所有表类型中都忽略了这个功能。这可能有些怪异,实际上却非常正常:对于数据库的所有外键的每次插入、更新和删除后,进行完整性检查是一个耗费时间和资源的过程,它可能影响性能,特别是当处理复杂的或者是缠绕的连接树时。因而,用户可以在表的基础上,选择适合于特定需求的最好结合。所以,如果需要更好的性能,并且不需要完整性检查,可以选择使用MyISAM表类型,如果想要在MySQL中根据参照完整性来建立表并且希望在此基础上保持良好的性能,最好选择表结构为innoDB类型

mysql为何不建议使用外键_MYSQL外键的使用以及优缺点相关推荐

  1. mysql基本语法 外键_mysql外键基本功能与用法详解

    本文实例讲述了Mysql外键基本功能与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是外键 外键的增加 外键的修改和删除 外键的约束模式 首发日期:2018-04-12 什么是外键: 外键就 ...

  2. mysql外键_MySQL外键约束(FOREIGN KEY)

    MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用.对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表). 外键用 ...

  3. mysql engine 外键_Mysql 外键设置

    (1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库 ...

  4. mysql 把主键当外键_MySQL主键和外键使用及说明

    MySQL主键和外键使用及说明 一.外键约束 MySQL通过外键约束来保证表与表之间的数据的完整性和准确性. 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的 ...

  5. mysql是否推荐使用外键_MySQL 外键使用

    MySQL 外键使用 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持): 2.外键列必须建立了索引,MySQL 4.1.2以 ...

  6. mysql 把主键当外键_mysql主键和外键那点事

    1.主键: 若某一个属性组(注意是组)能唯一标识一条记录,该属性组就是一个主键.主键不能重复,且只能有一个,也不允许为空.定义主键主要是为了维护关系数据库的完整性. 2.外键: 外键用于与另一张表的关 ...

  7. mysql 说明外码_MySQL外键(foreign key)使用及说明详解

    外键也称之为外键约束: foreign key 外键: 外面的键, 一张表的一个字段(非主键)指向另外一个表的主键, 那么该字段就称之为外键. 外键所在的表称之为子表(附表); 外键所指向的主键所在的 ...

  8. mysql主键_mysql主键是什么?

    在mysql中,主键全称"主键约束",是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性:主键的作用是确定该数据的唯一性,主要是用于和其他表的外键关联, ...

  9. mysql 1075_mysql1075错误_1075报错怎么办_mysql主键冲突怎么办 - 树懒学堂

    当我们使用mysql数据库的时候,非常容易遇上mysql1075的报错. 在mysql中1075报错的原因是一个字段设置了自动递增,另外一个字段被设置为主键,发生冲突. 在数据库当中,勾选自动递增的, ...

最新文章

  1. java 输入流可以合并吗_HOW2J Java 文件输入输出流,合并与拆分
  2. JavaScript:事件冒泡和事件委托
  3. 第2章 Python与数据分析
  4. spring(2)装配Bean
  5. JVM从入门到放弃——JVM内存模型
  6. firefox浏览器优化-速度超chrome
  7. Spring3中的mvc:interceptors标签配置拦截器
  8. SQL Server-【知识与实战VII】存储过程(下)
  9. C/C++中的static和extern关键字
  10. Java EE Servlet 几个path
  11. 分类信息网站模板(ICP许可证)已通过审核-两套样式模板
  12. java免费翻译api接口_多语言翻译api
  13. 点餐系统ip地址_教你一步一步做无线点餐项目(登录篇)
  14. 视频直播方案(加强版
  15. 身份证OCR识别,居民二代身份证识别第三方数据接口
  16. 支付系统,支付流程及实现介绍
  17. 系统默认只有一张内置的静态壁纸,如如何修改可以内置多张静态壁纸
  18. 女生适合做测试吗?看完这篇文章你就懂了
  19. 三种男性最需要的营养素
  20. VSCode通过源代码管理插件GitLens提交项目代码的过程

热门文章

  1. 变量泵-变量马达静液压行走 Variable pump-variable motor in Drive system
  2. 记录一次微信小程序实现预览pdf
  3. 手机看PDF电子书如何设置左右翻页
  4. 最常用的客观赋权方法——熵权法
  5. []struct 直接赋值方法,匿名struct数组赋值,slice struct赋值
  6. js实现input输入框内容自动格式化工具-Cleave.js使用教程
  7. 1500ml等于多少l_1500ml是多少斤啊
  8. python总结报告模板_Python中RE模块总结
  9. Unity C#工具类 ArrayHelper
  10. 键盘输入一个整数,判断是否为质数