当前位置: 首页 > news >正文

5.2 参照完整性

5.2.1 外键约束

语法格式:constraint < symbol > foreign key ( col_nam1[, col_nam2... ] ) references table_name (col_nam1[, col_nam2...]) 
[ on delete { restrict | cascade | set null | no action } ] 
[ on update { restrict | cascade | set null | no action } ] 

说明: 
(1)symbol:指定外键约束的名。 
(2)foreign key(col_naml,col_nam2…]):外键关键字,其后面为要设置的外键列名。 
(3)table_name (col_naml[,col_nam2…J):被参照表名,后面为要设置的主键列名。 
(4)on delete | on update:可以为每个外键定义参照动作,包含以下两部分。
①指定参照动作应用的语句,即update和delete语句。 
②指定采取的动作,即restrict,cascade,set null,no action,set default,restrict为默认值。 
(5)restrict:限制策略,要删除或更新被参照表中被参照列上且在外键中出现的值时,拒绝对被参照表的删除或更新操作。 
(6)cascade:级联策略,从被参照表删除或更新行时自动删除或更新参照表中匹配的行。
(7)set null:置空策略,从被参照表删除或更新行时,设置参照表中与之对应的外键列为nu。如果外键列没有指定not null限定词,这就是合法的。 
(8)no action:拒绝动作策略,拒绝采取动作,即如果有一个相关的外键值在被参照表里,删除或更新被参照表中主键值的企图不被允许,和 RESTRICT一样。 
(9) set default: 默认值策略,作用和set null一样,只不过set default是指定参照表中的外键列为默认值。 

1.在创建表时创建外键约束

【例5.10】创建 scorel表,在cno列以列级完整性约束方式定义外键。 

create table 选课1(学号 char (6) not null,课程号 char(4) not null references 课程1 (cno),成绩 tinyint null,primary key(学号,课程号));

 

【例5.11】创建选课2表,在课程号列以表级完整性约束方式定义外键,定义相应参照动作。

create table 选课2(学号 char(6) not null,课程号 char(4) not null,成绩 tinyint null,primary key(学号,课程号),constraint FK_选课2 foreign key(课程号) references 课程2(课程号)on delete cascade on update restrict); 

 

在表级定义外键约束时指定约束名字为FK_选课2。
这里定义了两个参照动作:on delete cascade表示当删除课程表中某个课程号的记录时,如果成绩表中有该课程号的成绩记录,则级联删除该成绩记录;on update restrict表示当课程表某个课程号有成绩记录时,不允许修改该课程号

注意:外键只能引用主键或唯一性约束。

2.删除外键约束

语法格式: 
ALTER TABLE<表名> DROP FOREIGN KEY<外键约束名>; 

【例5.12】删除例8.11在选课2表上定义的外键约束。 

alter table 选课2 drop foreign key FK_选课2;

3.在修改表时创建外键约束

 【例5.13】重新在score2表上定义外键约束。 

alter table 选课2add constraint FK_选课2 foreign key (课程号) references 课程2(课程号);

http://www.lryc.cn/news/370597.html

相关文章:

  • SpringCache 缓存 - @Cacheable、@CacheEvict、@CachePut、@Caching、CacheConfig 以及优劣分析
  • 数据结构 —— 堆
  • 【运维】如何更换Ubuntu默认的Python版本,update-alternatives如何使用
  • 2024 年适用于 Linux 的 5 个微软 Word 替代品
  • 大模型日报2024-06-12
  • LVGL欢乐桌球游戏(LVGL+2D物理引擎学习案例)
  • 国产数字证书大品牌——JoySSL
  • Codeforces Global Round 26 D. “a“ String Problem 【Z函数】
  • Next.js 加载页面及流式渲染(Streaming)
  • 形如SyntaxError: EOL while scanning string literal,以红色波浪线形式在Pycharm下出现
  • DockerCompose+Jenkins+Pipeline流水线打包SpringBoot项目(解压安装配置JDK、Maven等)入门
  • Web前端开发个人技能全面剖析:四维度深度理解,五能力实战展现,六要素构建优势,七步骤持续精进
  • 如何让 uboot启动时自动执行指令?(执行“mtdparts default”命令)
  • Java的集合框架总结
  • 基于DenseNet网络实现Cifar-10数据集分类
  • 我的“工具”库
  • Pytorch常用函数用法归纳:Tensor张量之间的计算
  • 小公司要求真高
  • 进阶篇02——索引
  • 三:SpringBoot的helloworld和使用Springboot的优点以及快速创建Springboot应用
  • 网络仿真方法综述
  • Android-Q升级-Camera记录
  • Android studio如何导入项目
  • PHP实现一个简单的接口签名方法以及思路分析
  • StartAI”梦想合伙人 ”招募计划
  • 记录:podman安装redis
  • TrinityCore启动报错: MySQL library version (8.0.37 id 80037) does not match
  • 代码随想三刷字符串篇
  • 华为支持手指关节手势的原理
  • Flink的简单学习五