发布网友 发布时间: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教程里都可以找到详细的解释
你找来书好好看看吧,读书要注意其中一些关键词语哦,呵呵!~
希望你早日学成!