快速解锁ACCESS数据库外键的创建与删除技巧
创始人
2025-05-28 16:51:15
0

日期:2023年3月15日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006


目录

文章目录

  • 一、前言
  • 二、外键的作用
  • 三、外键的创建
    • (3-1)更新操作
      • (3-1-1)级联更新
      • (3-1-2)更新置NULL
    • (3-2)删除操作
      • (3-2-1)级联删除
      • (3-2-2)删除置NULL
  • 四、外键的删除
    • (4-1)语法
    • (4-2)示例


在这里插入图片描述


一、前言

看了很多网上的教程,这方面的知识还是比较零散的。如果项目应用错了外键,那么很有可能会出现不能保存,或者不能删除的清空。这两种情况在设计阶段可能可以比较及时发现问题的,但是还有一种情况就比较隐藏了,那就是SET NULL,客户数据突然就空了,这才叫一个头大。好了,话不多说,进入正题吧……

二、外键的作用

外键(Foreign Key) 实际上就是加一个约束(CONSTRAINT ),其的作用在于禁止写入引用外键没有的或者唯恐的数据、级联更新更新置空级联删除以及删除置空

主键(Primary Key)是用于标志实体唯一性
外键(Foreign Key)是用于标志引用完整性的。

值得指出的是,本文所说的置空,不是设置为空字符串,而是置NULL的意思。

三、外键的创建

ALTER TABLE [表名] ADD CONSTRAINT [外键名称] FOREIGN KEY ([外键字段名称]) REFERENCES [参照表的表名] ([参照表的字段名称]) [ON UPDATE CASCADE |SET NULL] [ON DELETE CASCADE |SET NULL]}

为了更好描述,将两个表分别定义为:

原始表:添加约束的表,即[表名]中的表
参考表:添加约束的表(即原始表)会参考这个表来做动作,那么“这个表”就是参考表(也有大部分人叫做引用表,但是我觉得这个叫法不是很好区分,所以下述我统一称之为参考表),即[参照表的表名]中的表

ON 动作1 动作2
动作1:UPDATE(更新)和DELETE(删除)
动作2:CASCADE(级联)和SET NULL(置空)

  • 基础语法:
语法说明
ON UPDATE CASCADE级联更新
ON UPDATE SET NULL更新置空
ON DELETE CASCADE 级联删除
ON DELETE SET NULL删除置空
  • 复合语法:
语法说明
ON UPDATE CASCADE ON DELETE CASCADE级联更新、级联删除
ON UPDATE CASCADE ON DELETE SET NULL级联更新、删除置空
ON UPDATE SET NULL ON DELETE CASCADE更新置空、级联删除
ON UPDATE SET NULL ON DELETE SET NULL更新置空、删除置空
  • 错误语法:
语法说明
ON UPDATE SET NULL CASCADE错误语法,避免使用
ON DELETE SET NULL CASCADE 错误语法,避免使用
ON UPDATE CASCADE SET NULL错误语法,避免使用
ON DELETE CASCADE SET NULL错误语法,避免使用

(3-1)更新操作

级联更新更新置NULL
语法UPDATE CASCADEUPDATE SET NULL
说明修改参考表数据,对应的原始表数据也会更新修改参考表数据,对应的原始表数据会被置NULL

(3-1-1)级联更新

语法:

ALTER TABLE [表名] ADD CONSTRAINT [外键名称] FOREIGN KEY ([外键字段名称]) REFERENCES [参考表的表名] ([参考表的字段名称]) ON UPDATE CASCADE;

示例:

ALTER TABLE [goods] ADD CONSTRAINT [fk_up_goods_group] FOREIGN KEY ([gid]) REFERENCES [group] ([gid]) ON UPDATE CASCADE;

1、原始表-货品表数据如下所示:

id(货品代码)name(货品名称)gid(分组代码)
G0001打印机GP0001

2、修改参考表-分组表的分组代码gid,由 GP0001 改为 XX0001 办公用品,修改后的分组如下所示:

gid分组代码gname分组名称
XX0001打印机

3、修改参考表-分组表的分组代码gid,会级联更新原始表-货品表的记录,如下所示:

id(货品代码)name(货品名称)gid(分组代码)
G0001打印机XX0001

(3-1-2)更新置NULL

语法:

ALTER TABLE [表名] ADD CONSTRAINT [外键名称] FOREIGN KEY ([外键字段名称]) REFERENCES [参考表的表名] ([参考表的字段名称]) ON UPDATE SET NULL;

示例:

ALTER TABLE [goods] ADD CONSTRAINT [fk_upnull_goods_group] FOREIGN KEY ([gid]) REFERENCES [group] ([gid]) ON UPDATE SET NULL;

1、原始表-货品表数据如下所示:

id(货品代码)name(货品名称)gid(分组代码)
G0001打印机GP0001

2、修改参考表-分组表的分组代码gid,由 GP0001 改为 XX0001 办公用品,修改后的分组如下所示:

gid分组代码gname分组名称
XX0001打印机

3、修改参考表-分组表的分组代码gid原始表-货品表的记录中的gid将会置NULL,如下所示:

id(货品代码)name(货品名称)gid(分组代码)
G0001打印机NULL

(3-2)删除操作

级联删除删除置NULL
语法DELETE CASCADEDELETE SET NULL
说明删除参考表数据,对应的原始表数据也会被删除删除参考表数据,对应的原始表数据会被置NULL

(3-2-1)级联删除

语法:

ALTER TABLE [表名] ADD CONSTRAINT [外键名称] FOREIGN KEY ([外键字段名称]) REFERENCES [参考表的表名] ([参考表的字段名称]) ON DELETE CASCADE;

示例:

ALTER TABLE [goods] ADD CONSTRAINT [fk_del_goods_group] FOREIGN KEY ([gid]) REFERENCES [group] ([gid]) ON DELETE CASCADE;

1、原始表-货品表数据如下所示:

id(货品代码)name(货品名称)gid(分组代码)
G0001喷墨打印机GP0001
G0002针式打印机GP0001
G0003猴哥牌打印机GP0002

2、删除参考表-分组表的分组代码gidGP0001 的记录,删除后的分组如下所示:

gid分组代码gname分组名称
GP0001打印机
GP0002猴哥办公

3、删除参考表-分组表的分组代码gidGP0001的记录,原始表-货品表的分组代码为GP0001的所有记录将会被删除,如下所示:

id(货品代码)name(货品名称)gid(分组代码)
G0001喷墨打印机GP0001
G0001针式打印机GP0001
G0003猴哥牌打印机GP0002

(3-2-2)删除置NULL

语法:

ALTER TABLE [表名] ADD CONSTRAINT [外键名称] FOREIGN KEY ([外键字段名称]) REFERENCES [参考表的表名] ([参考表的字段名称]) ON DELETE SET NULL;

示例:

ALTER TABLE [goods] ADD CONSTRAINT [fk_delnull_goods_group] FOREIGN KEY ([gid]) REFERENCES [group] ([gid]) ON DELETE SET NULL;

1、原始表-货品表数据如下所示:

id(货品代码)name(货品名称)gid(分组代码)
G0001打印机GP0001

2、删除参考表-分组表的分组代码gidGP0001的记录

gid分组代码gname分组名称
GP0001打印机

3、删除参考表-分组表的分组代码gidGP0001的记录,原始表-货品表记录中gidGP0001将会置NULL,如下所示:

id(货品代码)name(货品名称)gid(分组代码)
G0001打印机NULL

四、外键的删除

(4-1)语法

两种写法都可以,不过建议采用NO1

NO1:

ALTER TABLE [表名] DROP CONSTRAINT [外键名称];

NO2:

ALTER TABLE 表名 DROP CONSTRAINT 外键名称;

(4-2)示例

ALTER TABLE [goods] DROP CONSTRAINT [fk_goods_group];

参考文章:

1、《CONSTRAINT 子句 (Microsoft Access SQL)》
2、《删除外键关系》


版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/129059521

相关内容

热门资讯

天热谁不爱这一口?自制雪糕,快... 天热谁不爱这一口?自制雪糕,快在家里做起来吧 雪糕一定是人类文明史上最伟大的美食发明,天热的时候来上...
大S配方加芒果干的咖喱鸡肉饭:... 您是否愿意尝试一下大S秘制的咖喱鸡肉饭?这份菜肴中融入了芒果干,口感层次十分丰富!然而,它的制作过程...
【节气养生】顺应天时过芒种,五... 节 气 每年的6月5日左右为芒种,是二十四节气中的第九个节气,也是夏季的第三个节气。《月令七十二候集...
原创 白... 最近,演员白敬亭的行程在西藏林芝南迦巴瓦峰附近引发了广泛关注,恰逢他主演的都市剧《难哄》热播。这次旅...
原创 “... 继“杀象充饥”后,非洲又出了一个奇怪操作。 津巴布韦近日宣布将发放50张大象狩猎许可证,50张只是暂...
库尔勒:凌霄花盛放 游客纷至沓... 6月5日,新疆库尔勒市库尔楚园艺场迎来凌霄花的盛放时刻。一簇簇凌霄花全然怒放,宛如跳动的火焰,将乡村...
原创 后... 三亚女游客疑被蛇咬后离世的消息,在热搜上“霸屏”整整3天!不少网友都纳闷:每天那么多意外事件,为啥这...
原创 糖... 你是否为餐后血糖的飙升而烦恼?不妨餐前喝一杯酸奶再吃饭,这个简单易行的小习惯可能给你带来意想不到的惊...
夏天来了吃这八道菜,清热解火营... 在炎炎夏日,炽热的阳光烘烤着大地,气温节节攀升,人们常常会感到口干舌燥、食欲不振,身体也容易出现各种...
玉面枣糕的详细制作方法,暄软香... 玉面枣糕是一道色香味俱佳的传统糕点,以面粉和红枣为主要原料。下面是制作玉面枣糕的详细步骤: 一、用...
又是蒸蒸煮煮的三餐,普通食材巧... 三餐要吃好,如何才是吃好?早餐馒头、米粥、面条,加点蔬菜或是肉蛋奶等;午餐来点豆制品、瘦肉、鱼和粗粮...
吕文扬的提子试元诚吃记 夏日的午后,阳光透过玻璃窗洒在厨房的料理台上,吕文扬站在一筐新鲜的提子前,仔细端详着这些元诚晶莹剔透...
原创 被... #优质好文激励计划# 前几天跟几个哥们儿撸串,隔壁桌一小伙子举着瓶进口啤酒直嚷嚷: “国产啤酒就是‘...
玉面搓鱼的详细制作方法,软滑筋... 玉面搓鱼是一道美味可口的面食,其口感独特,深受人们喜爱。下面,我将为你详细介绍玉面搓鱼的做法: 所...
吃饭团的民族:从日本早餐,看见... 一顿不起眼的早餐,藏着两种社会系统的差异。 一、谁的早餐,更便宜? 去日本旅行的人,十有八九会说:“...