MySQL之约束

简述:

概念:

约束是作用于表中字段上的规则,用于限制存储在表中的

数据目的:

保证数据库中数据的正确、有效性和完整性。

分类

约束描述关键字
非空约束限制该字段的数据不能为 NULLNOT NULL
唯一约束保证该字段的所有数据都是唯一的,不重复的UNIQUE
主键约束主键是数据表中唯一标识,要求字段值非空且唯一PRIMARY KEY
默认约束在保存数据时,如果未指定该字段的值,则采用默认值DEFAULT
检查约束保证字段值满足某一条件(从 MySQL 8.0.16 版本之后开始支持)CHECK
外键约束用来让两张表的数据之间建立联系,保证数据的完整性和一致性FOREIGN KEY

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束 

如何使用?

字段名字段含义字段类型约束条件约束关键字
idID 唯一标识int主键,且自动增长PRIMARY KEY, AUTO_INCREMENT
name姓名varchar(10)不为空,并且唯一NOT NULL, UNIQUE
age年龄int大于 0,并且小于等于 120CHECK
status状态char(1)如果没有指定该值,默认值为 1DEFAULT
gender性别char(1)无约束条件
create table emp2(id int primary key auto_increment comment '主键',name varchar(10) not null unique comment '姓名',age int check ( age >= 18 && age <= 80 ) comment '年龄',status char(1) default '1' comment '状态',gender char(1) comment '性别'
)comment '员工表'

解释:

  1. id:设置为主键 (PRIMARY KEY),并且自动递增 (AUTO_INCREMENT)。
  2. name:设置为 VARCHAR(10),并且不能为空 (NOT NULL),同时要求唯一 (UNIQUE)。
  3. age:设置为 int 类型,并添加检查约束 (CHECK),保证年龄大于 18 且不超过 80。
  4. status:设置为 CHAR(1),如果插入时未指定值,则默认为 '1'
  5. gender:设置为 CHAR(1),无其他额外的约束条件。

该表设计用于存储员工的 ID、姓名、年龄、状态和性别,并对这些字段进行了约束,以确保数据的完整性和准确性。

 外键约束

在 MySQL 中,外键约束用于维护两个表之间的关系,并确保参照完整性(即外键字段的值必须存在于另一个表的主键或唯一键字段中)。外键约束通常用于建立父表和子表之间的关系,确保数据的一致性。

如何建立外键约束?

外键约束语法:

CONSTRAINT constraint_name FOREIGN KEY (foreign_key_column) REFERENCES parent_table(parent_key_column)
  • constraint_name:外键约束的名称(可选)。
  • foreign_key_column:子表中的外键列。
  • parent_table:父表名称。
  • parent_key_column:父表中的对应主键或唯一键列。

创建外键约束的步骤:

  1. 创建父表:父表是主键所在的表,外键将参照它的主键。
  2. 创建子表:子表包含外键,该外键必须参照父表的主键或唯一键。
create table dept(id int primary key auto_increment comment  'ID',name varchar(50) not null comment '部门名称'
) comment '部门';
INSERT INTo dept(id, name) VALUES(1,'研发部'),(2,'市场部'),(3,'财务部'),(4,'销售部'),(5,'总经办');create table emp2(id int primary key auto_increment comment '主键',name varchar(10) not null unique comment '姓名',age int check ( age >= 18 && age <= 80 ) comment '年龄',status char(1) default '1' comment '状态',gender char(1) comment '性别',dept_id int comment '部门ID'
)comment '员工表';insert into emp2(name, age,gender,dept_id) values
('Tom1',18,'男',3),('Tom4',20,'男',1),
('Tom2',28,'女',1),('Tom5',25,'男',5),
('Tom3',19,'男',4),('Tom6',40,'女',1),
('小李子',18,'男',1),('小智障',30,'女',2);#建立外键约束
alter table emp2 add constraint fk_emp2_id foreign key (dept_id) references dept(id);

外键的删除以及更新

类型:

行为说明
NO ACTION当在父表中删除/更新对应记录时,先检查该记录是否有关联的外键。如果有则不允许删除/更新(与 RESTRICT 一致)。
RESTRICT当在父表中删除/更新对应记录时,先检查该记录是否有关联的外键。如果有则不允许删除/更新(与 NO ACTION 一致)。
CASCADE当在父表中删除/更新对应记录时,所有相关的子表记录也会被删除/更新。
SET NULL当在父表中删除对应记录时,相关子表中的外键值将被设置为 NULL(前提是该外键列允许 NULL 值)。
SET DEFAULT当父表有变化时,子表的外键列会被设置成一个默认的值(注意:InnoDB 存储引擎不支持 SET DEFAULT 行为)。

 外键约束语法:

CONSTRAINT constraint_name FOREIGN KEY (foreign_key_column) REFERENCES parent_table(parent_key_column)
  • constraint_name:外键约束的名称(可选)。
  • foreign_key_column:子表中的外键列。
  • parent_table:父表名称。
  • parent_key_column:父表中的对应主键或唯一键列。

1. 删除外键约束: 

ALTER TABLE employees DROP FOREIGN KEY fk_department;

2. 添加外键约束(如果表已经创建): 

ALTER TABLE employees
ADD CONSTRAINT fk_department
FOREIGN KEY (department_id) REFERENCES departments(department_id);

ON DELETE 和 ON UPDATE 选项:

可以在创建外键时指定外键的删除和更新行为。

  • ON DELETE CASCADE:当父表中的记录被删除时,自动删除子表中与该记录相关的记录。
  • ON UPDATE CASCADE:当父表中的记录被更新时,自动更新子表中与该记录相关的记录。

例子:

create table dept1(id int primary key comment  'ID',name varchar(50) not null comment '部门名称'
) comment '部门';
INSERT INTo dept1(id, name) VALUES(1,'研发部'),(2,'市场部'),(3,'财务部'),(4,'销售部'),(5,'总经办');create table emp2(id int primary key auto_increment comment '主键',name varchar(10) not null unique comment '姓名',age int check ( age >= 18 && age <= 80 ) comment '年龄',status char(1) default '1' comment '状态',gender char(1) comment '性别',dept_id int comment '部门ID'
)comment '员工表';insert into emp2(name, age,gender,dept_id) values
('Tom1',18,'男',3),('Tom4',20,'男',1),
('Tom2',28,'女',1),('Tom5',25,'男',5),
('Tom3',19,'男',4),('Tom6',40,'女',1),
('小李子',18,'男',1),('小智障',30,'女',2);alter table emp2 add constraint fk_emp2_dept_id foreign key (dept_id) references dept(id) on update cascade on delete  cascade;# 查看有哪些外键
SHOW CREATE TABLE emp2;# 删除外键约束
ALTER TABLE emp2 DROP FOREIGN KEY fk_emp2_id;

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/427860.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python基础知识(六)--字典遍历、公共运算符、公共方法、函数、变量分类、参数分类、拆包、引用

字典遍历方法 函数名含义keys()以列表的形式&#xff0c;返回一个字典所有的键。values()以列表的形式&#xff0c;返回一个字典所有的值。items()返回由键值组成的序列&#xff0c;主要应用于遍历字典。 公共运算符 运算符描述支持的容器类型合并字符串、列表、元组*复制字符…

沟通更高效:微信群转移至企业微信操作攻略!

微信群转移到企业微信并不难&#xff0c;具体操作如下&#xff1a; 打开移动端企业微信主页&#xff0c;找到微信聊天栏中的【接收微信中的工作消息】&#xff1b; 点击【前往微信选择群聊】&#xff0c; 跳转到微信&#xff1b; 选择微信上的工作群聊&#xff0c;只能选择作…

K8S容器实例Pod安装curl-vim-telnet工具

在没有域名的情况下&#xff0c;有时候需要调试接口等需要此工具 安装curl、telnet、vim等 直接使用 apk add curlapk add vimapk add tennet

性能优化一:oracle 锁的原则

文章目录 锁的原则查看具体会话阻塞过程 锁的原则 1、只有被修改时,行才会被锁定。 2、当条语句修改了一条记录,只有这条记录上被锁定,在Oracle数据库中不存在锁升 3、当某行被修改时 &#xff0c;它将阻塞别人对它的修改。 4、当一个事务修改一行时.将在这个行上加上行锁(TX…

大佬,简单解释下“嵌入式软件开发”和“嵌入式硬件开发”的区别

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;首先&#xff0c;嵌入式硬…

zabbix之钉钉告警

钉钉告警设置 我们可以将同一个运維组的人员加入到同一个钉钉工作群中&#xff0c;当有异常出现后&#xff0c;Zabbix 将告警信息发送到钉钉的群里面&#xff0c;此时&#xff0c;群内所有的运维人员都能在第一时间看到这则告警详细。 Zabbix 监控系统默认没有开箱即用…

React学习day08-useReducer、useMemo、memo、useCallback、forwardRef、useInperativeHandle

15、useReducer 1&#xff09;作用&#xff1a;用来管理相对复杂的状态数据&#xff0c;类似于useState 2&#xff09;使用步骤&#xff08;传递一般的参数&#xff09;&#xff08;在APP.js中&#xff09;&#xff1a; ①定义一个reducer函数&#xff0c;在函数中通过switc…

Linux——k8s认识

计算资源隔离 - 更方便进行高并发架构的维护和升级 - 架构管理的灵活性更高&#xff0c;不再以单个节点的物理资源作为基础 技术&#xff1a; - 硬件辅助虚拟化 - 容器技术 在企业部署方案中&#xff0c;很少以单节点实现虚拟化和容器技术&#xff0c;一般以集群状态来运…

68 - I. 二叉搜索树的最近公共祖先

comments: true difficulty: 简单 edit_url: https://github.com/doocs/leetcode/edit/main/lcof/%E9%9D%A2%E8%AF%95%E9%A2%9868%20-%20I.%20%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E8%BF%91%E5%85%AC%E5%85%B1%E7%A5%96%E5%85%88/README.md 面试题…

MySQL高阶1873-计算特殊奖金

目录 题目 准备数据 分析数据 总结 题目 编写解决方案&#xff0c;计算每个雇员的奖金。如果一个雇员的 id 是 奇数 并且他的名字不是以 M 开头&#xff0c;那么他的奖金是他工资的 100% &#xff0c;否则奖金为 0 。 返回的结果按照 employee_id 排序。 准备数据 Crea…

【Python语言初识(一)】

一、python简史 1.1、python的历史 1989年圣诞节&#xff1a;Guido von Rossum开始写Python语言的编译器。1991年2月&#xff1a;第一个Python编译器&#xff08;同时也是解释器&#xff09;诞生&#xff0c;它是用C语言实现的&#xff08;后面&#xff09;&#xff0c;可以调…

Python编码系列—Python代理模式:为对象赋予超能力的魔法

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

数据结构(Day14)

一、学习内容 结构体 概念 引入&#xff1a;定义整数赋值为10 int a10; 定义小数赋值为3.14 float b3.14; 定义5个整数并赋值 int arr[5] {1 , 2 , 3 , 4 ,5}; 定义一个学生并赋值学号姓名成绩 定义一个雪糕并赋值名称产地单价 问题&#xff1a;没有学生、雪糕 数据类型 解决&…

Python语言学习-pandas库学习

一、什么是Pandas库 Pandas是python的第三方库&#xff0c;他用于灵活的数据操作&#xff0c;数据可视化&#xff0c;数据清洗&#xff0c;数据的聚合和转换&#xff0c;数据的可视化 二、安装pandas库 在终端中运行 pip install pandas 导入Pandas库并重命名为pd import …

2024年9月第3周AI资讯

阅读时间&#xff1a;3-4min 更新时间&#xff1a;2024.9.16-2024.9.20 目录 OpenAI 推出 o1&#xff1a;一种新的“推理”人工智能模型 微软为 Excel 和 Word 添加了更快的 Copilot World Labs 利用 AI 创建 3D 世界 AI 利用文本创建开放世界视频游戏 OpenAI 推出 o1&#x…

【vue element-ui】关于删除按钮的提示框,可一键复制

实现效果&#xff1a; Delete: function (id) {this.$confirm(此操作将永久删除该文件, 是否继续?, 提示, {confirmButtonText: 确定,cancelButtonText: 取消,type: warning,center: true,}).then(() > {Delete(id).then(() > {this.$message({type: success,message: 删…

工业交换机如何保证数据的访问安全

在现代工业自动化环境中&#xff0c;工业交换机作为关键的网络设备&#xff0c;扮演着数据传输和信息交互的重要角色。为了确保数据的访问安全&#xff0c;工业交换机不仅具备高效的转发性能&#xff0c;还集成了多层次的安全防护机制&#xff0c;以抵御各种潜在的网络威胁。 首…

传输大咖44 | 云计算企业大数据迁移如何更安全高效?

在云计算时代&#xff0c;数据已成为企业最宝贵的资产之一。对于依赖云服务的企业和组织来说&#xff0c;大数据迁移是实现业务扩展和优化的关键步骤。然而&#xff0c;这一过程并非没有挑战。传统的文件传输方式在安全性、稳定性和速度上往往无法满足云计算企业的需求。本文将…

C++(Qt)软件调试---断点高级用法(20)

C(Qt)软件调试—断点高级用法&#xff08;20&#xff09; 文章目录 C(Qt)软件调试---断点高级用法&#xff08;20&#xff09;[toc]1、概述2、断点高级用法1.1 条件断点1.2 日志断点/记录点/消息追踪点1.3 函数断点1.4 命中次数断点1.5 异常断点1.6 等待断点/触发断点1.7 临时断…

掌握数据中心虚拟化:关键挑战与解决方案

数据中心虚拟化是使用云软件平台将物理数据中心转变为数字数据中心的过程&#xff0c;使企业能够远程访问信息和应用程序。它包括在数据中心内创建物理基础设施的多个虚拟版本&#xff0c;通过将服务器、存储和网络等资源划分为虚拟实体来实现资源的高效利用。 虚拟化环境中的关…