精华内容
下载资源
问答
  • 数据库外键约束

    2020-05-17 09:00:29
    数据库外键约束 1.RESTRICT(mysql默认):拒绝更新或删除(是拒绝更新还是删除看外键的具体设置)主表被外键引用的列。 2.NO ACTION:同RESTRICT 3.SET NULL:更新或删除主表对应列,会使子表对应列的值变成NULL...

    数据库外键约束

    1.RESTRICT(mysql默认):拒绝更新或删除(是拒绝更新还是删除看外键的具体设置)主表被外键引用的列。

    2.NO ACTION:同RESTRICT

    3.SET NULL:更新或删除主表对应列,会使子表对应列的值变成NULL(子表该列不能默认为NOT NULL)。

    4.CASCADE:联动,即主表的改动会引发子表的改动。

    5.SET DEFAULT:(InnoDB不支持)

    展开全文
  • 数据库外键约束方式

    2012-04-11 19:33:56
    本文档是数据库外键约束方式指南 需要的朋友请下载 保证可用
  • 关闭数据库外键约束

    千次阅读 2017-08-06 19:54:27
    当向数据库中插入数据的时候,如果有表之间的关系十分复杂,尤其是是存在各种外键关系,这是需要暂时关闭这种针对外键约束的检查,本文针对以下三种数据库进行了一个总结

    本文的测试环境是:

    • MySQL 5.5.16
    • Microsoft SQL Server 2008 R2 (SP2)
    • Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

    当向数据库中插入数据的时候,如果有表之间的关系十分复杂,尤其是是存在各种外键关系,这是需要暂时关闭这种针对外键约束的检查,本文针对以下三种数据库进行了一个总结,如下:

    一、MySQL数据库

    MySQL中数据库中的外键约束是通过变量foreign_key_checks作用的,这个变量管理的全局的外键约束,而没有针对每个表的外键约束进行单独管理

    1. 查看变量外键约束

    • show variables like '%foreign_key_checks%'
    • select @@foreign_key_checks

    2. 开启外键约束:

    set foreign_key_checks = 1

    3.关闭外键约束:

    set foreign_key_checks = 0

    二、SQL Server数据库

    SQL Server数据库中针对外键约束进行了统一的管理,它的粒度已经到表的层次,而不像MySQL中的那样只能对全局进行设置。SQL Server中外键约束的管理是通过系统的存储过程来实现的,如下:

    sp_helpconstraint [ @objname = ] 'table'   [ , [ @nomsg = ] 'no_message' ]
    • @objname:约束信息所在的表名,类型为nvarchar(776),没有默认值;
    • @nomsg:要打印表名信息,几乎不用;

    1. 查看约束信息

    EXEC sp_helpconstraint 't_archetype_revision_file'

    这里写图片描述

    在存储过程中查询到的约束信息有:

    • Constraint_Type:列的约束类型,约束的类型有:
      • PRIMARY KEY
      • FOREIGN KEY
      • DEFAULT
      • CHECK
    • Constraint_Name:用户或者系统定义的约束名称;
    • Delete_action :针对外键约束,当外键删除时采取的操作,为No Action或者cascade;
    • Update_Action:针对外键约束,当外键更新时采取的操作,为No Action或者cascade;
    • Status_Enabled :针对外键约束和check约束,是否启用,当约束建立时默认是启用的;
    • Status_For_Replication :针对外键和check约束,当复制的时候是否强制执行;
    • Constraint_Keys :针对check和default约束显示的是表达式,针对其他约束显示的是列名;

    2. 开启外键约束

    通过Alter Table语句完成,示例如下:

    Alter Table t_archetype_revision_file CHECK CONSTRAINT FK1jdbfqwxvcn37y16ofob43ywf

    3. 关闭外键约束

    Alter Table t_archetype_revision_file NOCHECK CONSTRAINT FK1jdbfqwxvcn37y16ofob43ywf

    三、Oracle数据库

    Oracle中的外键约束的管理与SQL Server中的类似,也是统一管理的,针对的也是表的层次。外键约束的统一管理是在数据字典表user_constraints中。

    1.查看约束

    SELECT * FROM user_constraints

    在里面有很多的字段,这里我们只关注相关的几项:

    • CONSTRAINT_NAME:约束名称;
    • CONSTRAINT__TYPE:约束类型,包括:
      • R:外键约束;
      • U:唯一约束;
      • P:主键约束;
      • C:check约束;
      • O:用于视图,只读约束;
      • ……
    • TABLE_NAME:约束所在的表;
    • STATUS:使用状态,ENABLED标识启用,DISABLED标识禁用;

    但是在这个视图中,没有约束对应的表的列,可以通过连接user_cons_columns来查询,如下:

    SELECT * FROM user_constraints t1 left join user_cons_columns t2 on t1.CONSTRAINT_NAME = t2.CONSTRAINT_NAME where t1.CONSTRAINT_NAME = 'LOGMNR_SESSION_EVOLVE$_PK'

    2. 开启外键约束

    默认情况下,建立约束时开启该约束。

    alter table table_name enable constraint constraint_name 

    3. 关闭外键约束

    alter table table_name disable constraint constraint_name
    展开全文
  • 1,由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。 eg:数据库和应用是一...

    外键存在的两个问题:一是对DB数据完整性和一致性的影响;二是对性能的影响
    优势:
    1,由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。
    eg:数据库和应用是一对多的关系,A应用会维护他那部分数据的完整性,系统一变大时,增加了B应用,A和B两个应用也许是不同的开发团队来做的。他们如何协调保证数据的完整性,而且一年以后如果又增加了C应用呢?
    2,有主外键的数据库设计可以增加ER图的可读性,这点在数据库设计时非常重要。
    3,外键在一定程度上说明的业务逻辑,会使设计周到具体全面
    4、数据的一致性会交给数据库验证,代码量小
    缺点:
    1,可以用触发器或应用程序保证数据的完整性
    2,过分强调或者说使用主键/外键会平添开发难度,导致表过多等问题
    3,不用外键时数据管理简单,操作方便,性能高(导入导出等操作,在insert,update,delete数据的时候更快)
    4、每次做数据的修改和删除的时候都必须要考虑外键约束,会导致数据的复杂性增加
    5、会降低性能
    5、级联删除问题:多级级联删除会让数据变的不可控,触发器也被严格禁用
    6、数据耦合问题:数据库层面数据关系产生耦合,数据迁移维护困难
    6、并发问题,外键约束会启用行级锁,主表写入时会进入阻塞
    eg:在海量的数据库中想都不要去想外键,试想,一个程序每天要insert数百万条记录,当存在外键约束的时候,每次要去扫描此记录是否合格,一般还不止一个字段有外键,这样扫描的数量是成级数的增长!可能会造成系统的积压,可能还会造成系统的延迟和奔溃的情况
    结论:
    1,在大型系统中(性能要求不高,安全要求高),使用外键;在大型系统中(性能要求高,安全自己控制),不用外键;小系统随便,最好用外键。
    2,用外键要适当,不能过分追求
    3,不用外键而用程序控制数据一致性和完整性时,应该写一层来保证,然后个个应用通过这个层来访问数据库

    展开全文
  • mySql数据库外键约束条件

    千次阅读 2014-05-12 14:42:05
    在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持); 2.外键列必须建立了索引,...

    在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。

    外键的使用条件:

    1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);
    2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立;
    3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;

    外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作;

    外键的定义语法:

    [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
        REFERENCES tbl_name (index_col_name, ...)
        [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
        [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
    该语法可以在 CREATE TABLE 和 ALTER TABLE 时使用,如果不指定CONSTRAINT symbol,MYSQL会自动生成一个名字。
    ON DELETE、ON UPDATE表示事件触发限制,可设参数:
    RESTRICT(限制外表中的外键改动)
    CASCADE(跟随外键改动)c
    SET NULL(设空值)
    SET DEFAULT(设默认值)
    NO ACTION(无动作,默认的)

    展开全文
  • Mysql数据库外键约束(foreign key)

    千次阅读 2017-04-09 21:19:01
    备注: 外键约束中,被约束字段的值必须来自父键的参考字段FR:海涛高软(QQ技术交流群:386476712)
  • 当取值为Cascade时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。 当取值为Set Null时,则当在父表(即外键的来源表)中...
  • DB2数据库外键约束 博客分类:db2oracle 在工作中,有时会需要把一个数据库中的数据导入到另外一个数据库,由于外键的影响,在执行insert语句时,需要确保先插入父表中的数据,然后插入子表中的数据,由于一...
  • 数据库外键约束的几种方法及区别

    千次阅读 2019-04-10 21:54:15
    1、cascade级联模式 ,父表的操作,对应的子表关联的数据也跟着操作 2、district :严格模式(默认的...3、set null:(置空模式)父表被操作之后,子表对应的外键字段被置空。 4、no action 拒绝删除或者更新父表。 ...
  • SQL的外键约束可以实现级联删除与级联更新;    ORACLE则只充许级联删除。    SQL级联删除与级联更新使用格式:   CREATE TABLE A001(ID INT PRIMARY KEY,NAME VARCHAR(20))  CREATE TABLE A002(ID ...
  • 禁用启用数据库外键约束

    千次阅读 2008-10-25 11:04:00
    -- =====================================================-- 删除数据库中的所有数据(通过禁用约束)-- 不好的地方在于如果本身有已经禁用的约束,执行这个后会开启它-- 邹建 2005.09(引用请保留此信息)-- =========...
  • 参考链接:...   报错原因:由于外键约束导致操作表失败; Cannot add or update a child row: a foreign key constraint fails (`info`.`student`, CONSTRAINT `FK_STUDENT_REF_...
  • 约束保证了数据的完整性和一致性。下面这篇文章主要给大家介绍了关于MariaDB数据库外键约束的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
  • 所以我在想 他们的”hibernate配置取代数据库外键约束"肯定是跟关联设置无关的,这个只影响查询吧,所以他们是再说"我不用外键,我也不用关联,所有的有关系的表,在数据操作时,让开发人员去记,用程序员的sql去...
  • 数据库 外键约束

    2017-07-04 17:12:21
    一:首先是外键的定义  如果一个字段X在一张表(表一)中是主关键字,而在另外一张表(表二)中不是主关键字,则字段X称为表二的外键;换句话说如果关系模式R1中的某属性集不是自己的主键,而是关系模式R2的主键,...
  • MySQL数据库——外键约束

    千次阅读 2019-05-06 16:47:23
    文章目录方案一:单张表方案二:两张表方案三:两张表并添加外键约束 把用户信息及其收货地址保存在数据中 方案一:单张表 创建表 create table user_info( id char(36) primary key, user_name varchar(30) not ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 97,116
精华内容 38,846
关键字:

数据库外键约束