问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是外键约束

发布网友 发布时间:2022-04-23 02:41

我来回答

4个回答

热心网友 时间:2023-07-11 19:27

外键约束是指用于在两个表之间建立关系,需要指定引用主表的哪一列。

外键约束对子表如此检查处理:

在子表上进行INSERT、UPDATE 操作的*是,要和主表中的主键值匹配,或为NULL, 否则不允许。

外键约束对父表如此检查处理:

在父表_上进行UPDATE、DELETE操作的*,取决于在定义子表的外键时指定的ON UPDATE、ON DELETE子句(不同的DBMS支持的情况不尽相同)。众ON DELETE子 句各选项的作用:

1、No ACTION :删除主表记录,如果子表中有和主表匹配的记录,则不允许(产生一个错误提示)。此为默认操作(不指定ON DELETE子句, 系统自动采取的操作)。

2、CASCADE  (级联):删除主表记录,也将删除子表中的匹配记录。

3、SET NULL :删除主表记录,将子表中的匹配记录的外键值改为NULL。

4、SET DEFAULT :删除主表记录,将子表中的匹配记录的外键值改为默认值。众ONUPDATE子句各选项的作用。

扩展资料

外键的用途是确保数据的完整性。它通常包括以下几种: 

1、实体完整性,确保每个实体是唯一的(通过主键来实施) 

2、域完整性,确保属性值只从一套特定可选的集合里选择 

3、关联完整性,确保每个外键或是NULL(如果允许的话)或含有与相关主键值相配的值。

约束的主要目的是控制存储在外键表中的数据,但它还可以控制对主键表中数据的修改。例如,如果在 publishers 表中删除一个出版商,而这个出版商的 ID 在 titles 表中记录书的信息时使用了。

则这两个表之间关联的完整性将被破坏,titles 表中该出版商的书籍因为与 publishers 表中的数据没有链接而变得孤立了。

FOREIGN KEY 约束防止这种情况的发生。如果主键表中数据的更改使之与外键表中数据的链接失效,则这种更改是不能实现的,从而确保了引用完整性。

如果试图删除主键表中的行或更改主键值,而该主键值与另一个表的 FOREIGN KEY 约束值相关,则该操作不可实现。

若要成功更改或删除 FOREIGN KEY 约束的行,可以先在外键表中删除外键数据或更改外键数据,然后将外键链接到不同的主键数据上去。 

参考资料来源:百度百科--外键

参考资料来源:百度百科--约束

热心网友 时间:2023-07-11 19:27

如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的。

比如说:
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');

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

--------------------虽然很基础,但这篇文章讲的很好很清楚----------------

参考资料:http://qianzui.javaeye.com/blog/552878

热心网友 时间:2023-07-11 19:28

所谓外键约束就是通过这个外键与其他表建立联系。

热心网友 时间:2023-07-11 19:28

StuID当然得是主键!!!
而且每一个表都应该有一个主键!
Stuinfo的主键是StuID
Scoreinfo的主键是ID
创建表的时候在这两个字段后加primarykey
****************
我的意思是每个表都应该有且只有一个主键
你写的那两个创建表的语句都没有主键
应该这样写:
表1
……
StuID
SMALLINT
IDENTITY(1,1)
primary
key,
……
表2
……
ID
INT
primary
key,
……
我想,你问的问题在随便一本SQL教程里都可以找到详细的解释
你找来书好好看看吧,读书要注意其中一些关键词语哦,呵呵!~
希望你早日学成!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我想下个好点的股市行情软件,光大证券金阳光app怎么样啊? 股票行情软件下载选哪个比较好?光大证券的金阳光app怎么样? 光大证券开户APP是什么 光大用什么炒股软件 家里房顶漏水怎么办 房顶漏水最好补漏方法 中石化薪资揭秘(天津、海南、镇海、中科、茂名) 专科生在茂名石化待遇怎样 茂名石化正式工待遇怎么样 茂名石化待遇如何 729-08胶皮是内能的吗 拌豆苗一定要焯水吗? 刚买的保温杯生锈怎么办? 保温杯被盐泡后生锈怎么办? 豌豆苗需要焯水吗? 怎么用VB编写WINDOWS XP 关机程序 保温杯生锈了怎么办? 高分求SetNamedSecurityInfo的用法 怎样去除保温杯内的锈斑 we perceive people as means to ends rather than as ends in their own right.求解 保温杯里面生锈怎么办 LDAP怎样获取AD域中指定组的所有用户 怎么洗掉生锈的保温杯? 简单的SQL server 存储过程的SQL语句拼接问题,请教下达人! 家用保温杯生锈了,怎么用最有效的方法除锈? tpo13阅读第一篇的11题求教,为何不选b linux (centos6.5) 将用户加入用户组的问题 如何使用 PrimaryGroupID 属性来查找的用户的主要组 英语specify the primary group怎么翻译? 怎么把人脸P瘦【我用美图秀秀和photoshopcs3的】 手机火山拍视频大眼瘦脸总是不稳定咋办? 凉拌豌豆苗如何做才能保持口味脆爽呢? 不锈钢的保温杯里面有点生锈,该怎么去锈呢?? linux group by 什么意思 豌豆苗怎么烧 我是小学英语组7号怎么翻译? 保温杯里面生锈了怎么清洗 豌豆苗可以生吃吗? /etc/group不显示新增用户是其组成员的信息 杯底生锈怎么办? 豌豆尖是否需要焯水 我现在又在学习数据库 有些单词不懂 请知道的人帮我解释下 谢谢了_百 ... 保温杯杯口生锈怎么除 保温杯内壁生锈了该怎么办 在数据库中创建表Group,为何报错 豌豆颠怎么煮才好吃 真空保温杯内壁生锈了,怎么办? mysql中group by里面的问题 mysql group by 索引问题 oracle group by 性能优化 请指点下蒜蓉豌豆苗怎样做?