外键约束方式
如果表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方式作用相同。
分享到:
相关推荐
本文档是数据库的外键约束方式指南 需要的朋友请下载 保证可用
外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。 这里以MySQL为例,总结一下3种外键约束方式的区别和联系。 ...
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定义外键...
完整性约束包括:主键约束、外键约束、非空约束、规则、默认值、触发器等。 数据表的操纵语句:包括数据插入、数据删除、数据修改操作语句。 7种查询方式,分别涉及到:集合查询、字符匹配查询、汇总查询、分组查询...
在MySQL里创建外键时,提示错误,但只提示很简单的信息:ERROR 1005 (HY000): Can’t create table ‘db_qxztc.qx_userssssnew’ (errno: 150)。根本起不到解决问题的作用。 要看错误的详细提示,可以使用命令:(在...
用户菜单权限表建表语句以及数据插入语句,后台管理系统搭建必备,学习专用。 如果使用外键关联,在对表进行数据操作时就考虑另一张关联的表...so,在设计表时尽量减少表与表直接的外键约束,避免麻烦,表关联关系清晰
训练案例4训练描述实现表字段的主键约束,自动增长,非空约束,唯一性约束,外键约束.操作步骤答案1:创建表的时候,添加主键方式一:创建表时,在字段描述处,声明指定
数据库中的表是用于组织和存储数据的基本结构。它将数据按照特定的列进行分类和整理,使得...5. 数据完整性:表的设计可以定义数据的约束和规则,例如主键约束、外键约束等。这些约束有助于确保数据的完整性和一致性。
同时,我们还考虑了数据的安全性和完整性,通过加密存储敏感信息、设置外键约束等方式,防止数据泄露和非法修改。 在程序开发方面,我们采用SSM框架,实现了用户登录、请假申请、审批流程、通知提醒等功能。通过...
独立的数据库表一般指建立的表和其他表没有外键约束关系。这样的表多用于数据处理。 5) 三范式或者关系型模型。 6) 非关系型数据源。非关系型数据源一般包括COBOL copy books、VSAM文件、Flat文件、Spreadsheets等。...
mysql中常用的约束:主键约束(primary key) 唯一约束(unique) 非空约束(not null) 外键约束(foreign key) 主键约束:被修饰过的字段唯一非空 注意:一张表只能有一个主键,这个主键可以包含多个字段 方式1:建表的同时...
3.3、增量脚本指在执行主脚本或副脚本之后,根据需求对某个表添加/修改约束(主外键约束,长度约束等),添加/修改字段/添加数据等情况对数据库结构改变处理的一种行为脚本。 1.2作用 1、 快速产出自定义规则...
提交方式AJAX,post(系统不建议删除,可能有外键约束,建议使用审核) ·品牌排序: 对应“品牌表”中的sort字段,在以后的使用中是倒序。提交方式AJAX,post(大数在前面) ·品牌审核: 对应“品牌表”中的...
上面的创建外键的方法没有指定约束名称,系统会默认给外键约束分配外键约束名称,命名为student_ibfk_n, 其中student是表名,n是当前约束从1开始的整数。 指定约束名称: create table student( id int auto_...
数据完整性 ——4种约束5 复合约束6 外键约束7 级联删除/更新8 表查询9 连接方式10.函数11.小练习12.索引、视图13.索引14.储存过程15.流程控制16.触发器、事件17.事件18 事务19 安全管理20 数据库维护 1 数据库创建...
以不违反外键约束的方式加载灯具的依赖关系图 有一个非常简单的API(FixtureDependencies.load(:model__fixture)) 处理几乎所有循环依赖 包括用于Test :: Unit的Rails和Sequel测试助手(以及用于RSpec的Sequel...
进行主/从表同步修改,彻底摆脱外键约束! 6 ★可自定义主/从表关联。对于物理上没有主/外键关联的表,可在配置文件中进行设置,使其以主/从窗口 方式显示; 7 ★对表中显示的数据进行查找及替换; 8 ★...
利用sql server自带的级联删除、级联更新功能,即其外键约束途径 alter table dbo.C add constraint FK_C_A_AID foreign key(AID) references dbo.A(AID) on delete cascade on update cascade go alter table dbo.C...
掌握各种数据库约束:主键/非空/**/默认值/外键约束/零填充/自增长等 掌握表与表的关系:一对一/一对多/多对多 掌握表关系的建表原则 掌握多表查询的方式:内连接/外连接/全连接/子查询等 掌握数据库的三大范式 掌握...