sqlserver外键关系有什么用?
4个回答
展开全部
SQL的主键和外键的作用:
外键取值规则:空值或参照的主键值。
(1)插入非空值时,如果主键表中没有这个值,则不能插入。
(2)更新时,不能改为主键表中没有的值。
(3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。
(4)更新主键记录时,同样有级联更新和拒绝执行的选择。
简而言之,SQL的主键和外键就是起约束作用。
主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
外键取值规则:空值或参照的主键值。
(1)插入非空值时,如果主键表中没有这个值,则不能插入。
(2)更新时,不能改为主键表中没有的值。
(3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。
(4)更新主键记录时,同样有级联更新和拒绝执行的选择。
简而言之,SQL的主键和外键就是起约束作用。
主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
展开全部
外键就是避免外键表与主键表上的主键字段数据有差异。
举个例子,你现在有一个主表tab_h,主键t_id,外键表tab_d,t_id是tab_h的t_id外键。那么你就不能先insert tab_d 或者delete tab_d,因我t_id在tab_h中没有值。这样就违反了外键约束。
当然了,避免这个麻烦,就需要代码写的规范,无论如何,要先对主表做insert ,delete(update 无所谓,但不能修改t_id为tab_h中没有的值)。
内连接就是两个表,通过1个字段连接起来,必须两个表里都有的值才能被连接。外连接就是把两个表全部连接,即使没有的值用null会表示出来。比如
tab1 tab2
t_id t_name t_id t_name
1 a 1 a
2 b 3 e
4 d 4 d
select * from tab1 a join tab2 b on a.t_id=b.t_id ---内连接
t_id t_name t_id t_name
1 a 1 a
4 d 4 d
select * from tab1 a full join tab2 b on a.t_id=b.t_id ---外连接
t_id t_name t_id t_name
1 a 1 a
2 b
3 e
4 d 4 d
举个例子,你现在有一个主表tab_h,主键t_id,外键表tab_d,t_id是tab_h的t_id外键。那么你就不能先insert tab_d 或者delete tab_d,因我t_id在tab_h中没有值。这样就违反了外键约束。
当然了,避免这个麻烦,就需要代码写的规范,无论如何,要先对主表做insert ,delete(update 无所谓,但不能修改t_id为tab_h中没有的值)。
内连接就是两个表,通过1个字段连接起来,必须两个表里都有的值才能被连接。外连接就是把两个表全部连接,即使没有的值用null会表示出来。比如
tab1 tab2
t_id t_name t_id t_name
1 a 1 a
2 b 3 e
4 d 4 d
select * from tab1 a join tab2 b on a.t_id=b.t_id ---内连接
t_id t_name t_id t_name
1 a 1 a
4 d 4 d
select * from tab1 a full join tab2 b on a.t_id=b.t_id ---外连接
t_id t_name t_id t_name
1 a 1 a
2 b
3 e
4 d 4 d
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
主要用於数据约束.
部门表:部门ID(主键),部门名称
员工表:部门ID(外键),员工工号,员工姓名
外键作用是:员工表的部门ID(外键)必须存在於部门表的部门ID(主键),但也可为空.
内连接:select * from 员工表 inner join 部门表 on 部门ID(外键)=部门ID(主键)
显示数据:
1.员工所属的部门必须存在
2.部门里必须有员工
左外连接select * from 员工表 left join 部门表 on 部门ID(外键)=部门ID(主键)
显示数据:
1.所有员工都显示,部门不存在显示为空.
部门表:部门ID(主键),部门名称
员工表:部门ID(外键),员工工号,员工姓名
外键作用是:员工表的部门ID(外键)必须存在於部门表的部门ID(主键),但也可为空.
内连接:select * from 员工表 inner join 部门表 on 部门ID(外键)=部门ID(主键)
显示数据:
1.员工所属的部门必须存在
2.部门里必须有员工
左外连接select * from 员工表 left join 部门表 on 部门ID(外键)=部门ID(主键)
显示数据:
1.所有员工都显示,部门不存在显示为空.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
外键啊,昨天刚讲过,嘿嘿出来献丑了
举个例子吧,
a表 里面有ID user pwd permission
b表里面有 Pid permission
permission是权限的意思 假设pid是外键 那a 表里的permission怎么查呢 ,要靠B表查 那这就是外键的作用,我理解吧就是2张表里,b表里有a表里想要得到的东西
,他们之间的联系要靠外键来实现
内连接是只显示满足条件的
select*from a inner join b on a .permission =b.Pid(就是刚说的实现)
完了
外连接
select * from a full join b on a.ID = b.Pid
(我这个够通俗了吧 呼呼 全大白话看不懂哥不依)
在来修改下,举个例子,你和你媳妇舌吻, 那内连接就是取交集 ,舌头纠缠在一起的地方- -!
外连接就是取所有
举个例子吧,
a表 里面有ID user pwd permission
b表里面有 Pid permission
permission是权限的意思 假设pid是外键 那a 表里的permission怎么查呢 ,要靠B表查 那这就是外键的作用,我理解吧就是2张表里,b表里有a表里想要得到的东西
,他们之间的联系要靠外键来实现
内连接是只显示满足条件的
select*from a inner join b on a .permission =b.Pid(就是刚说的实现)
完了
外连接
select * from a full join b on a.ID = b.Pid
(我这个够通俗了吧 呼呼 全大白话看不懂哥不依)
在来修改下,举个例子,你和你媳妇舌吻, 那内连接就是取交集 ,舌头纠缠在一起的地方- -!
外连接就是取所有
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询