精华内容
下载资源
问答
  • 外键概念

    2006-12-05 19:49:29
    weather 和 cities 表。考虑一下下面的问题:你想确保没有人可以在 weather 表里插入一条在 cities 表里没有匹配记录的数据行。 这就叫维护你的表的参考完整性。 在简单的数据库系统里,实现(如果也叫实现)这个...

    weathercities 表。考虑一下下面的问题:你想确保没有人可以在 weather 表里插入一条在 cities 表里没有匹配记录的数据行。 这就叫维护你的表的参考完整性。 在简单的数据库系统里,实现(如果也叫实现)这个特性的方法 通常是先看看 cities 表里是否有匹配的记录, 然后插入或者拒绝新的 weather 记录。 这个方法有许多问题,而且非常不便,因此 PostgreSQL 可以为你做这些。

    新的表声明看起来会象下面这样:

    CREATE TABLE cities (
            city            varchar(80) primary key,
            location        point
    );
    
    CREATE TABLE weather (
            city            varchar(80) references cities(city),
            temp_lo         int,
            temp_hi         int,
            prcp            real,
            date            date
    );
    

    然后我们试图插入一条非法的记录:

    INSERT INTO weather VALUES ('Berkeley', 45, 53, 0.0, '1994-11-28');

     

    ERROR:  insert or update on table "weather" violates foreign key constraint "weather_city_fkey"
    DETAIL:  Key (city)=(Berkeley) is not present in table "cities".
    展开全文
  • 数据库中主外键概念详细介绍

    千次阅读 多人点赞 2020-05-17 18:18:33
    一、主外键概念 主键 ​ 1、主键 ​ 简单而言,能够唯一的表示表中的每一行数据,这样的列属性成为表的主键,使用表主键可以保证实体的完整性,可对表内数据进行修改、删除时使用主键来操作,同时也主要用于和其他...

    关于数据库的主外键设置问题

    一、主外键概念

    主键

    1、主键

    ​ 简单而言,能够唯一的表示表中的每一行数据,这样的列属性称为表的主键,使用表主键可以保证实体的完整性,可对表内数据进行修改、删除时使用主键来操作,同时也主要用于和其他表之间通过主外键关联建立表之间的联系。例如:

    ​ 下图这个员工表中对应第一行红色字段为表的主键,它标识出了数据的唯一性

    在这里插入图片描述

    2、主键作用

    ​ 保证数据库表的唯一性、完整性

    ​ 用于和其他表之间建立外键关联的关系,从而实现对关联表的控制操作

    3、主键设计原则

    ​ 主键的设计对用户无意义(由下边举例阐述)

    ​ 以“居民身份证” 作为作为主键的设置,在升号时带来的麻烦作为反例。但实际上身份证作为主键设计是没有问题的。用身份证作为主键,对其他数 据的引用带来了好处,数据完整性得到保证。升号属于几十年才可能有的事情(也许接下来几十年都不会再升号),这属于极少变化的属性。虽然升级时带来了麻 烦,可是否不用身份证作为主键的升级就不麻烦了吗?其实无论选择什么属性作为主键,升级的工作量都是相当的。

    ​ 主键设置应该是单列的,为了提高查询和连接的效率

    ​ 主键永远不要去更新它

    ​ 主键不应该包括动态变化的数据,例,时间戳、时间列等

    ​ 主键通常要设置自增长,由计算机自动来生成

    4、主键选取策略

    ​ 通常数据库建表时一个表至多能设置一个主键,以下为常用三种主键选取方式:

    1. ​ 自动增长型字段

    2. ​ 手动增长型字段

    3. ​ UniqueIdentifier

      ​ 使用UniqueIdentifier SQL Server提供一个UniqueIdentifier数据类型(16字节),并提供一个生成函数NEWID(),生成一个唯一的UniqueIdentifier

    4. ​ COMB类型

      保留UniqueIdentifier的前10字节,后6字节表示生成时间

    外键

    1、外键

    ​ 外键就是通过表中一个键将两个表连接起来的键

    在这里插入图片描述

    2、外键作用

    ​ 保证数据的完整性和一致性

    ​ 主要目的是控制存储在外键表中的数据。

    ​ 支持关联查询。

    ​ FOREIGN KEY约束用于防止会破坏表之间链接的操作

    3、阻止执行

    ​ 从表插入一条数据时,若外键值不是主表的主键值时,将阻止插入数据

    在这里插入图片描述

    mysql> INSERT INTO banji VALUES('11','英语一班','8');		-- 错误写法
    ERROR 1062 (23000): Duplicate entry '16' for key 'PRIMARY'
    
    mysql> INSERT INTO banji VALUES('11','英语一班','9');		-- 正确写法
    Query OK, 1 row affected (0.00 sec)
    

    ​ 从表修改外键值时,其值不是主表的主键值则阻止修改(可参照上图理解)

    ​ 主表删除某一行时,其主键值在从表里存在则将阻止删除(若想删除,必须要现删除从表的关联行)

    ​ 主表修改主键值时,旧值在从表里存在,则将阻止修改(若想修改,必须要现删除从表的关联)。

    4、级联执行

    ​ 主表删除、修改某一行数据,则从表数据将被一起删除、修改

    总结

    ​ 结合实际情况来看,数据库设计时尽量不要设计太多外键关系;因为在后期的数据库维护起来比较麻烦,出现各种关联关系的表,耦合度比较高,因而个人不建议,设置太多外键关联。(可通过子代码编写方法,实现数据之间的逻辑业务处理)

    展开全文
  • 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。 说明:以学生和成绩的关系为例,学生表中的 student_id是主键,那么成绩表中的 student_id则为外键。如果更新学生表中的 student_id,同时触发成绩表...

    阿里Java规范

    【强制】不得使用外键与级联,一切外键概念必须在应用层解决。

    说明:以学生和成绩的关系为例,学生表中的 student_id是主键,那么成绩表中的 student_id则为外键。如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新,即为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。

    外键

    外键:表的外键是另一表的主键,外键是可以有重复的,可以是空值,用于保持数据的一致性。

    • 保证数据的完整性和一致性
    • 级联操作方便
    • 将数据完整性判断托付给了数据库完成,减少了程序的代码量。

    • 性能下降: 每次对数据进行DELETE或UPDATE操作都必须考虑外键约束 数据库都会判断当前操作是否违反数据完整性,性能下降。
    • 死锁:使用外键,外键关联的数据查询要去另一张表,获取额外的锁,容易造成死锁。
    • 扩展性问题:触发器 外键 这种依赖于数据库本身的特性 可扩展性较差。 分库分表方便,在水平拆分和分库的情况下,外键是无法生效的。

    参考

    https://www.cnblogs.com/rjzheng/p/9907304.html
    https://blog.csdn.net/u010695055/article/details/53169472
    https://blog.csdn.net/u010094934/article/details/90137110

    展开全文
  • 问题: 关于阿里巴巴开发手册”不得使用外键与级联,一切外键概念必须在应用层解决”的疑惑 描述: 原文如下: 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。 说明:以学生和成绩的关系为例,学生...

    原文地址:http://www.codes51.com/itwd/4517194.html

    问题: 关于阿里巴巴开发手册”不得使用外键与级联,一切外键概念必须在应用层解决”的疑惑
    描述:
    原文如下:

    【强制】不得使用外键与级联,一切外键概念必须在应用层解决。
    说明:以学生和成绩的关系为例,学生表中的 student id 是主键,那么成绩表中的 student id
    则为外键。如果更新学生表中的 student id ,同时触发成绩表中的 student id 更新,即为
    级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群 ; 级联更新是强阻
    塞,存在数据库更新风暴的风险 ; 外键影响数据库的插入速度。

    请问各位数据库是每个表都增加一个业务的编码字段做关联还是直接通过id关联呢?
    我的看法是:如果是小项目单库的话用id关联更方便,自动有主键索引,如果是分布式数据库项目每个表都建一个业务编码字段,通过业务编码字段关联,但是这样需要手动建索引提高查询效率.因为没有大项目的数据库经验,所以想问一下大中型的项目数据库业务关联是直接通过id关联还是增加一个业务编码字段关联呢?

    解决方案1:
    试试通过id关联,只是不在数据库上去约束

    解决方案2:
    就是不让用外键呗。 这个应该大多互联网项目 都不用外键了吧。我09年开始做互联网的项目,就没用过外键了。 至于为什么,楼上回答的好啊, 业务变动,修改数据库的成本很高。最重要的原因 文中说的也很清楚,分布式、高并发集群环境下,容易产生更新风暴。外键影响数据库的插入速度
    不用外键后, 各个数据表的关系维护,通过应用程序来解决。

    解决方案3:
    数据库表的关联,应该按照表的内部id做关联,不推荐用业务编码做主键。
    业务规则的变化是不可预测的,如果因为业务规则的变化导致数据库结构大的变动,甚至还要做数据更新,我认为是失败的设计方案。

    以上介绍了“ 关于阿里巴巴开发手册”不得使用外键与级联,一切外键概念必须在应用层解决”的疑惑”的问题解答,希望对有需要的网友有所帮助。

    展开全文
  • 设置外键的时候遇到1005错误。1005 - Can’t create table ‘oschina.#sql-97c_2’ (errno: 150) 然后查了很久才发现两个字段的大小不匹配。名字都叫做sid,一个是UNSIGNED INT(10),另一个是INT(11)。两个字段的类型...
  • 问题: 关于阿里巴巴开发手册”不得使用外键与级联,一切外键概念必须在应用层解决”的疑惑 描述: 原文如下: 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。 说明:以学生和成绩的关系为例,学生...
  • 对于下面这个问题,如果要在应用层解决,如何解决? 问题:以学生和成绩的关系为例,学生表中的 student _ id 是...则为外键。如果更新学生表中的 student _ id ,同时触发成绩表中的 student _ id 更新,即为 级联更新
  • 外键 主键 概念

    2020-11-04 09:09:17
    关于数据库主键和外键(终于弄懂啦) 关系型数据库中的一条记录中有若干个属性, 若其中某一个属性组(注意是组)能唯一标识一条记录, 该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学生...
  • MySql外键

    2018-03-18 00:33:00
    一、外键概念  外键是表中相对特殊的一个字段。外键所在的表为从表,外键所参照的表为主表。从表的外键值引用着主表的主键值。通过外键约束可将两张表已某种条件关联起来,实现数据的完整性和一致性。  注意事项...
  • 概念 定义: 外键另一表的主键,可重复,可为空,用于数据约束 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY FOREIGN KEY 约束用于预防破坏表之间连接的动作。 FOREIGN KEY 约束能防止非法数据插入外键列,...
  • 关于外键概念

    2012-06-15 17:26:04
    两个表 A表有一个主键,XID。 B表有一个主键,YID,和XID。 外键是那个? B表中的XID称为A表的外键?是这样吗? 还是A表XID是B表的外键
  • MySQL:外键

    2019-02-21 11:30:16
    外键概念 如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主...
  • SQL中的外键

    万次阅读 多人点赞 2019-06-26 21:03:31
    概念外键与主键相对,作用就是通过主外键的之间关系使对张表中的数据更好的关联。 外键特点: 从表外键的值是对主表主键的引用。 从表外键类型,必须与主表主键类型一致。 作用:外键可以保证数据的完整...
  • 主键、超键、候选键、外键概念

    千次阅读 2018-04-17 13:38:51
    主键、超键、候选键、外键概念主 键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。超 键:在关系中能唯一标识元组...
  • ER模型表示数据之间的关联 其次讲了外键概念被指向的为主表,另一个为从表,这种指向关系叫外键 查看索引,用索引可以提高查询效率,但增删改查麻烦 命令行操作mysql mysql-u用户名 -p数据库密码 一些数据库和数据...
  •  在实际开发中,数据库中一般不会存在外键,阿里的开发手册中也强制不使用外键与级联操作,一切外键概念必须在应用层解决。如果数据库中已存在外键了,怎么办呢?删除所有表的外键 查询schema中所有外
  • 3.2 创建外键 通过[constraint 外键ID名] foreign key(外键名) references 外键表(外键名),比如: create table a( id int(11), userid int(11), [constraint fk_userid] foreign key(userid) references user(id)...
  • Mysql主键和外键

    2021-05-19 09:52:56
    Mysql主键和外键 主键 概念 数据库表中对存储 数据对象唯一和完整表示的数据列或属性的组合 特点 主键是唯一的,一个表中至多有一个主键 不可以为空 允许组合主键 外键 概念 用于建立和加强两个表数据之间的...
  • 特例:子表(外键所在表)的外键可以为NULL,前面的规律作废(与主表引用列无关)。 5、主表的 约束键 叫:引用列、子表的约束键 叫:外键 6、Mysql中key 、primary key 、unique key 与index区别:前面三个是...
  • 外键

    2012-10-05 23:50:00
    外键可以为空的,一个表的关键的标识是主键,外键是否为空不影响表的结构及数据库设计概念的.外键只起个关联表的作用. 转载于:https://www.cnblogs.com/hanyingme/archive/2012/10/05/2712665.html...
  • Database之SQLSever:SQL命令实现理解外键、约束概念及其相关案例之详细攻略 目录 SQL命令实现理解外键、约束概念 外键 1、外键理解案例:外键只能指向主键并且类型要一致 约束 1、非空约束NOT NULL、...
  • 为什么需要外键

    2020-07-07 10:41:50
    外键概念: 外键 ( foreign key ) 是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。 比如我们将id、...
  • 04-04-外键

    2019-01-04 14:38:18
    外键概念 如果公共关键字在一个关系中是主关键字,那么这个关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相互联系。以另一个关系的外键做主关键字的表称为主表,具有此外键的表被称为主表的从...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,239
精华内容 18,895
关键字:

外键的概念