`

外键约束方式

阅读更多
创]外键约束方式     如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。这里以MySQL为例,总结一下3种外键约束方式的区别和联系。


     这里以用户表和用户组表为例,这是一个典型的多对一关系,多个用户对应于一个用户组。
     首先创建用户组表:
创建用户组表
create table t_group (
id int not null,
name varchar(30),
primary key (id)
);
并插入两条记录:
插入记录
insert into t_group values (1, 'Group1');
insert into t_group values (2, 'Group2');


下面创建用户表,分别以不同的约束方式创建外键引用关系:
1、级联(cascade)方式
级联方式
create table t_user (
id int not null,
name varchar(30),
groupid int,
primary key (id),
foreign key (groupid) references t_group(id) on delete cascade on update cascade
);


参照完整性测试
insert into t_user values (1, 'qianxin', 1); #可以插入
insert into t_user values (2, 'yiyu', 2);    #可以插入
insert into t_user values (3, 'dai', 3);    #错误,无法插入,用户组3不存在,与参照完整性约束不符


约束方式测试
insert into t_user values (1, 'qianxin', 1);
insert into t_user values (2, 'yiyu', 2);
insert into t_user values (3, 'dai', 2);
delete from t_group where id=2;              #导致t_user中的2、3记录级联删除
update t_group set id=2 where id=1;          #导致t_user中的1记录的groupid级联修改为2


2、置空(set null)方式
置空方式
create table t_user (
id int not null,
name varchar(30),
groupid int,
primary key (id),
foreign key (groupid) references t_group(id) on delete set null on update set null
);


参照完整性测试insert into t_user values (1, 'qianxin', 1); #可以插入
insert into t_user values (2, 'yiyu', 2);    #可以插入
insert into t_user values (3, 'dai', 3);     #错误,无法插入,用户组3不存在,与参照完整性约束不符


约束方式测试
insert into t_user values (1, 'qianxin', 1);
insert into t_user values (2, 'yiyu', 2);
insert into t_user values (3, 'dai', 2);
delete from t_group where id=2;              #导致t_user中的2、3记录的groupid被设置为NULL
update t_group set id=2 where id=1;          #导致t_user中的1记录的groupid被设置为NULL


3、禁止(no action / restrict)方式
禁止方式
create table t_user (
id int not null,
name varchar(30),
groupid int,
primary key (id),
foreign key (groupid) references t_group(id) on delete no action on update no action
);


参照完整性测试
insert into t_user values (1, 'qianxin', 1); #可以插入
insert into t_user values (2, 'yiyu', 2);    #可以插入
insert into t_user values (3, 'dai', 3);     #错误,无法插入,用户组3不存在,与参照完整性约束不符


约束方式测试
insert into t_user values (1, 'qianxin', 1);
insert into t_user values (2, 'yiyu', 2);
insert into t_user values (3, 'dai', 2);
delete from t_group where id=2;              #错误,从表中有相关引用,因此主表中无法删除
update t_group set id=2 where id=1;          #错误,从表中有相关引用,因此主表中无法修改


注:在MySQL中,restrict方式与no action方式作用相同。
分享到:
评论

相关推荐

    数据库外键约束方式

    数据库外键约束方式 外键约束是数据库中实现参照完整性的重要手段,它能够确保数据的一致性和正确性。外键约束方式有多种,包括级联、置空和禁止三种方式。 级联(Cascade)方式是指当主表中的记录被删除或更新时...

    禁用启用所有外键约束.tst

    在数据库管理中,外键约束是关系数据库设计中的一个重要概念,用于维护数据的一致性和完整性。外键约束确保了引用的完整性,即一个表中的外键值必须是另一个表中存在的主键值。在进行大规模数据导入、更新或者调试时...

    总结三种MySQL外键约束方式

    本文将详细介绍MySQL中三种外键约束方式:级联(cascade)、置空(set null)和禁止(no action或restrict),并通过实例来展示它们在数据操作时的行为差异。 1. **级联(cascade)方式** 在级联约束中,当主表中...

    数据库表排序,主表子表放置外键约束

    因此,通过程序化的方式对主表和子表进行排序,可以确保在插入时满足外键约束,提高导入数据的效率。 在提供的文件中,我们可以看到以下几个关键组件: 1. **GetMessage.java**:这可能是负责从源数据库获取数据并...

    MLDN魔乐科技_Oracle课堂18_外键约束

    下面将详细阐述外键约束的基本原理、作用及其实现方式。 首先,外键(Foreign Key)是数据库表中的一种字段,它引用了另一个表的主键(Primary Key),从而建立了两个表之间的关联。这种关联使得一个表的数据能够...

    数据库技术与应用 外键约束-D习题与作业.doc

    通过这种方式,外键约束确保了子表中的数据引用父表中有效的记录,防止了非法数据的插入,从而保持了数据的准确性。 外键约束的主要功能包括: 1. **数据完整性**:外键约束强制了参照完整性,不允许子表中出现父...

    MySQL外键约束的实例讲解

    MySQL外键约束是数据库设计中的一个重要概念,它用于在两个表之间建立联系,确保数据的一致性和完整性。外键约束的使用确保了当一个表(父表)中的数据发生更改时,与其关联的另一个表(子表)的相关数据也会相应...

    详解MySQL中的外键约束问题

    MySQL中的外键约束是数据库设计中用于维护数据完整性和参照完整性的关键机制,特别是在关系数据库中。外键约束确保了在一个表中的数据(子表)与另一个表(父表)中的数据之间的关联性。在MySQL中,外键约束主要用于...

    级联删除笔记【自用0分】

    级联删除和级联更新是数据库管理中非常重要的概念,特别是在多表关联的情况下,能够确保数据的一致性和完整性。...而外键约束方式则更加简洁明了,易于维护。具体选择哪种方式取决于实际应用场景的需求和个人偏好。

    在Oracle数据库中添加外键约束的方法详解

    在Oracle数据库中,外键约束是确保数据完整性和一致性的重要机制。它定义了一个表中的一个或多个列(称为外键)的值必须匹配另一个表(称为参照表)中某些行的值,以此来维护两个表之间的关系。这有助于保证两个表...

    laravel5.6中的外键约束示例

    在Laravel 5.6框架中,实现数据库表的外键约束是一种确保数据完整性和依赖关系的有效方式。外键约束是数据库管理系统中的一种机制,它用于在两个表的列之间创建链接。主表中的列被称为主键,而外键表中的列则被称为...

    MySQL删除表的时候忽略外键约束的简单实现

    通过这种方式,你可以在MySQL中安全且便捷地删除存在外键约束的表,无需关心它们之间的依赖关系。但请务必谨慎操作,因为这可能会导致数据丢失,特别是在生产环境中。在进行此类操作时,最好先备份你的数据,确保有...

    数据库技术与应用 使用Alter语句增加学生表的外键约束学习任务书.doc

    为了实现这一目标,数据库管理系统提供了各种约束机制,如主键约束、外键约束、唯一性约束和检查约束等。在《数据库技术与应用》这门课程中,学生将学习如何使用SQL语言中的ALTER语句来对已存在的表进行修改,特别是...

    oracle主外键查询

    这段代码展示了如何查询特定表(此处为“Ҫд”)的外键关联表信息,通过`p.OWNER`和`c.OWNER`确保查询的是当前用户的表,并通过`p.table_name`指定表名,通过`c.constraint_type='R'`筛选出外键约束。 2. **查询...

    Mysql增加外键的方法

    在使用ALTER TABLE语句时,如果需要删除已经存在的外键,不能直接使用DROP FOREIGN KEY,而要先通过SHOW CREATE TABLE查看外键的确切名称,然后使用ALTER TABLE语句配合DROP FOREIGN KEY命令来删除指定的外键约束。...

    SQL2005入门到精通(12)

    259 12.3.2 使用表设计器定义主键约束 260 12.3.3 使用T-SQL定义主键约束 261 12.4 外键约束 262 12.4.1 一个外键约束的示例 262 12.4.2 使用表设计器定义外键约束 263 12.4.3 使用T-SQL定义外键...

    hibernate基于主外键的一对多/多对一关联

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作转换为面向对象的方式,从而简化了数据访问层的开发。"hibernate基于主外键的一对多/多对一关联"是Hibernate中两个核心...

    MySQL外键创建失败1005原因汇总

    MySQL外键创建失败,往往是因为多种原因导致的,其中最常见的错误代码是1005。以下将详细解析这些原因,并提供相应...同时,学习和理解MySQL的外键约束原理以及InnoDB存储引擎的工作方式,对于解决这类问题非常有帮助。

    外键关联整理脚本

    2. **外键约束**:定义外键的同时,通常会添加外键约束,以确保插入或更新数据时遵循关联规则。例如,在MySQL中,可以使用`FOREIGN KEY`关键字来定义外键约束。 3. **级联操作**:外键可以配置为支持级联操作,如`...

Global site tag (gtag.js) - Google Analytics