sql外键关联

数据库mysql

建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表主键)。

外键作用: 使两张表形成关联,外键只能引用外表中的列的值!

指定主键关键字: foreign key(列名)

引用外键关键字: references <外键表名>(外键列名)

事件触发限制: on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action

例如:

outTable表 主键 id 类型 int

创建含有外键的表:
create table temp(
id int,
name char(20),
foreign key(id) references outTable(id) on delete cascade on update cascade);

说明:把id列 设为外键 参照外表outTable的id列 当外键的值删除 本表中对应的列筛除 当外键的值改变 本表中对应的列值改变。


自己实践 才能完全了解外键的作用 关键是:事件触发限制的作用

设置外建的时候加上:on delete cascade on update cascade
如:create table tablex
(....
.....
FOREIGN KEY(id)REFERENCES tabley(id) on delete cascade on update cascade
);

X表删除,Y表关联字段也自动删除

主键是本张表的主键,是唯一且非空的,而外键是另一张表中与这张表的某个字段的类型,字段名相同的字段,一般是用作关联两张或两张以上的数据表时用的。
以下面三张表为例:

有三张表,一张表是读者信息,有一个属性为readno,一张表是图书的信息,有一个属性是bookno,一张表是借阅关系,有两个属性分别以读者信息表中的readno,和图书信息表中的bookno为外键,我想问的是,在借阅关系表中插入数据时不是得自己写入readno和bookno吗,这样,设外键还有什么作用?


外键取值规则:空值或参照的主键值。
(1)插入非空值时,如果主键表中没有这个值,则不能插入。
(2)更新时,不能改为主键表中没有的值。
(3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。
(4)更新主键记录时,同样有级联更新和拒绝执行的选择。


简言之:

起约束作用,就是在借阅关系表中只能插入读者/图书信息表中存在的值
不然会出错.
作用在于如果你插入的readno或者bookno在两个表中没有,就会插不进去

下面是我从SQlservr2000里面导出关系表部分:

主键:UsrName.id
外键:Age.usrid

CONSTRAINT [FK_Age_UsrName] FOREIGN KEY
(
   [usrid]
) REFERENCES [dbo].[UsrName] (
   [id]
) ON DELETE CASCADE ON UPDATE CASCADE

--例如
create table zb --主表
(
zb_id
int primary key,
)

go

create table cb --从表
(
cb_id
int   primary key
           
FOREIGN KEY REFERENCES zb(zb_id) ON DELETE CASCADE , --指定级联删除
)
go

--主表数据
insert zb values(1)
insert zb values(2)
insert zb values(3)
--从表数据
insert cb values(1)
insert cb values(2)
insert cb values(3)


select * from zb
select * from cb
zb_id      
-----------
1
2
3

(所影响的行数为
3 行) mx_id -----------
1
2
3

(所影响的行数为
3 行)
--级联删除
delete from zb where zb_id = 1
select * from zb
select * from cb
zb_id      
-----------
2
3

(所影响的行数为
2 行)

mx_id      
-----------
2
3
(所影响的行数为
2 行)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值