MySQL的约束
文章目录
- 1、约束的概念
- 2、约束的分类
- 2.1 主键约束
- 2.1.1 概念
- 2.1.2 主键操作
- 2.2 自增约束
- 2.2.1 概念
- 2.2.2 自增操作
- 2.3 唯一约束
- 2.3.1 概念
- 2.3.2 唯一操作
- 2.4 非空约束
- 2.4.1 概念
- 2.4.2 非空操作
- 2.5 默认约束
- 2.5.1 概念
- 2.5.2 默认操作
- 2.6 外键约束
- 2.6.1 概念
- 2.6.2 外键操作
- 2.7 零填充约束
- 2.7.1 概念
- 2.7.2 零填充操作
1、约束的概念
-
1、概念
约束:constraint,约束是对表中数据的限制条件 -
2、作用
设计表的时候加入约束的目的就是为了保证表中的记录完整性和有效性比 -
3、分类
约束分类 | 关键字 |
---|---|
主键约束 | primary key 即 PK |
自增约束 | auto_increment |
唯一性约束 | unique |
非空约束 | not null |
默认约束 | default |
零填充约束 | zerofill |
外键约束 | foreign key 即 FK |
2、约束的分类
2.1 主键约束
2.1.1 概念
主键约束 primary key
1、主键约束是一个列或者多个列的组合,其值能唯一地标识表中的每一行,方便在RDBMS中尽快的找到某一行。
2、主键约束=唯一约束 + 非空约束 ,主键约束列不允许重复,也不允许出现空值。
3、每个表最多只允许一个主键
4、当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
5、RDBMS 是 Relational Database Management System 的缩写,中文译为“关系数据库管理系统”
2.1.2 主键操作
- 1、创建单列主键
方式1:在 create table 语句中,通过 PRIMARY KEY 关键字来指定主键。在定义字段的同时指定主键,语法格式如下:
语法:
create table 表名(...<字段名> <数据类型> primary key ...
)
实现:
create table emp1(eid int primary key,name VARCHAR(20),
);
方式2:在定义字段之后再指定主键,语法格式如下
语法:
create table 表名(...[constraint <约束名>] primary key [字段名]
);
实现:
create table emp2(eid INT,name VARCHAR(20),constraint pk1 primary key(id));
- 2、创建多列主键
所谓的联合主键,就是这个主键是由一张表中多个字段组成的。
当主键是由多个字段组成时,不能直接在字段名后面声明主键约束
一张表只能有一个主键,联合主键也是一个主键
语法:
create table 表名(...primary key (字段1,字段2,…,字段n)
);
实现:
create table emp3( eid int,name varchar(20),primary key(eid,name)
);
- 3、修改表的主键
语法:
alter table <表名> add primary key(字段列表);
实现:
alter table emp4 add primary key(eid);
- 4、删除主键
一个表中不需要主键约束时,就需要从表中将其删除。
删除单列主键和联合主键的SQL相同
语法:
alter table <数据表名> drop primary key;
实现:
alter table emp5 drop primary key;
2.2 自增约束
自增约束:auto_increment ,注意不要丢失下划线
2.2.1 概念
当主键定义为自增长后,此时主键的值就不再需要用户输入数据了,
由数据库系统根据定义自动赋值。每增加一条记录,
主键会自动以相同的步长进行增长。
通过给字段添加 auto_increment 属性来实现主键自增长
2.2.2 自增操作
- 1、设置主键自增
语法:
字段名 数据类型 auto_increment
实现:
create table t_user1( id int primary key auto_increment, name varchar(20)
);
默认情况下,auto_increment的初始值是 1,每新增一条记录,字段值自动加 1。
一个表中只能有一个字段使用 auto_increment约束,且该字段必须有唯一索引,以避免序号重复
auto_increment约束的字段必须具备 NOT NULL 属性。
auto_increment约束的字段只能是整数类型,如 TINYINT、SMALLINT、INT、BIGINT 等。
auto_increment约束字段的最大值受该字段的数据类型约束,达到上限,auto_increment就会失效。
- 2、设置自增字段的初始值
如果第一条记录设置了该字段的初始值,那么新增加的记录就从这个初始值开始自增
在创建表和创建表后都可以指定自增字段的初始值
方式1:
create table t_user2 ( id int primary key auto_increment, name varchar(20)
)auto_increment=100;
方式2:
create table t_user3 ( id int primary key auto_increment, name varchar(20)
);
alter table t_user2 auto_increment=100;
- 3、delete和truncate在删除后自增列的变化
Truncate 语法能够快速清空数据表内所有数据,并且能针对具有自动递增值的字段,做计数重置归零重新计算的作用,只能作用于表。
delete数据之后自动增长从断点开始
truncate数据之后自动增长从默认起始值开始
2.3 唯一约束
2.3.1 概念
唯一约束(Unique Key)是指所有记录中字段的值不能重复出现
2.3.2 唯一操作
- 1、添加唯一约束
语法:
方式1:<字段名> <数据类型> unique
方式2: alter table 表名 add constraint 约束名 unique(列);
实现:在创表时指定唯一
create table t_user8 ( id int , name varchar(20) , phone_number varchar(20) unique -- 指定唯一约束
);
实现:在创表之后,修改成唯一
alter table t_user9 add constraint unique_ph unique(phone_number);
- 2、删除唯一约束
alter table t_user9 drop constraint unique_ph;
2.4 非空约束
2.4.1 概念
非空约束(not null):指字段的值不能为空
对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错
2.4.2 非空操作
create table t_user7 ( id int , name varchar(20) , -- 指定非空约束 address varchar(20) -- 指定非空约束
);
设置非空:
alter table t_user7 modify name varchar(20) not null;
alter table t_user7 modify address varchar(20) not null;
删除非空:
alter table t_user7 modify name varchar(20) ;
alter table t_user7 modify address varchar(20) ;
2.5 默认约束
2.5.1 概念
默认约束 default :默认值约束用来指定某列的默认值。
2.5.2 默认操作
- 1、添加默认约束
语法:
方式1: <字段名> <数据类型> default <默认值>;
方式2: alter table 表名 modify 列名 类型 default 默认值;
实现:创建表时添加约束
create table t_user10 ( id int , name varchar(20) , address varchar(20) default ‘北京’
);
实现:修改表的默认约束
alter table t_user11 modify address varchar(20) default ‘北京’;
- 2、删除约束
alter table t_user11 modify column address varchar(20) default null;
2.6 外键约束
2.6.1 概念
外键约束 foreign key
外键:是指表中某个字段的值依赖于另一个表中的某个字段的值,被依赖的字段必须要有主键约束或者唯一约束
外键约束:用户实现数据库表的参照完整性。外键约束可以使两张表紧密结合起来,特别是对于删除/修改级联操作时,会保证数据的完整性。
2.6.2 外键操作
- 1 创建表时添加外键
创建dept表
create table dept(did int primary key auto_increment,dname varchar(20)
);
实现:创建表添加外键
create table emp(eid int primary key auto_increment,ename varchar(10),did int,-- 创建时添加表级外键约束constraint fk_did foreign key (did) references emp (did)
);
- 2 修改表的外键
alter table emp constraint fk_did foreign key (did) references dept(did)
- 3 删除表的外键
alter table emp drop foreign key did;
2.7 零填充约束
2.7.1 概念
零填充约束 zerofill
插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0。zerofill默认为int(10)
当使用zerofill 时,默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍,例如,有符号为-128到+127,无符号为0-256。
2.7.2 零填充操作
- 1 创建零填充
create table t_user12 ( id int zerofill , -- 零填充约束name varchar(20)
);
- 2 修改零填充
alter table t_user12 modify id int;
备注:
我们是八九点钟的太阳,我们要继续努力!!!
相关文章:
MySQL的约束
文章目录 1、约束的概念2、约束的分类2.1 主键约束2.1.1 概念2.1.2 主键操作 2.2 自增约束2.2.1 概念2.2.2 自增操作 2.3 唯一约束2.3.1 概念2.3.2 唯一操作 2.4 非空约束2.4.1 概念2.4.2 非空操作 2.5 默认约束2.5.1 概念2.5.2 默认操作 2.6 外键约束2.6.1 概念2.6.2 外键操作…...

Lnton羚通关于【PyTorch】教程:torchvision 目标检测微调
torchvision 目标检测微调 本教程将使用Penn-Fudan Database for Pedestrian Detection and Segmentation 微调 预训练的Mask R-CNN 模型。 它包含 170 张图片,345 个行人实例。 定义数据集 用于训练目标检测、实例分割和人物关键点检测的参考脚本允许轻松支持添加…...

AMD fTPM RNG的BUG使得Linus Torvalds不满
导读因为在 Ryzen 系统上对内核造成了困扰,Linus Torvalds 最近在邮件列表中表达了对 AMD fTPM 硬件随机数生成器的不满,并提出了禁用该功能的建议。 因为在 Ryzen 系统上对内核造成了困扰,Linus Torvalds 最近在邮件列表中表达了对 AMD fTPM…...

idea 转换为 Maven Project 的方法
选项: Add as Maven Project...
es1.7.2 按照_type先聚合,再按照时间二次聚合
// 设置查询条件if (this.query ! null) {this.searchbuilder.setQuery(this.query);}TermsBuilder typeAggregation AggregationBuilders.terms("agg_type").field("_type");DateHistogramBuilder dateTermsBuilder AggregationBuilders.dateHistogram(…...
pyqt5 如何修改QplainTextEdit 背景色和主窗口的一样颜色
如果您希望将 QPlainTextEdit 的背景颜色设置为与窗口背景相似的灰色,您可以使用窗口的背景颜色作为基准来设置 QPlainTextEdit 的背景颜色。以下是一个示例代码,展示如何实现这一点: from PyQt5.QtWidgets import QApplication, QMainWindo…...
解决使用element ui时el-input的属性type=number,仍然可以输入e的问题。
使用element ui时el-input的属性typenumber,仍然可以输入e, 其他的中文特殊字符都不可以输入,但是只有e是可以输入的,原因是e也输入作为科学计数法的时候,e是可以被判定为数字的, 但是有些场景是需要把e这种…...

ShardingSphere 可观测 SQL 指标监控
ShardingSphere并不负责如何采集、存储以及展示应用性能监控的相关数据,而是将SQL解析与SQL执行这两块数据分片的最核心的相关信息发送至应用性能监控系统,并交由其处理。 换句话说,ShardingSphere仅负责产生具有价值的数据,并通过…...

Redisson实现分布式锁示例
一、引入依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.16.0</version></dependency>二、配置类 import org.redisson.Redisson; import org.redisson.api.RedissonClient;…...
使用Nginx作为一个普通代理服务器
使用Nginx作为一个普通代理服务器, 请不要用于违法用途哦 nginx作为一个反向代理工具,除了可以进行反向代理之外,还可以用来作为代理工具来使用,作为代理工具使用的步骤如下,这个配置目前支持80端口 Windows系统代理设置对应IP, …...

chatglm2-6b模型在9n-triton中部署并集成至langchain实践 | 京东云技术团队
一.前言 近期, ChatGLM-6B 的第二代版本ChatGLM2-6B已经正式发布,引入了如下新特性: ①. 基座模型升级,性能更强大,在中文C-Eval榜单中,以51.7分位列第6; ②. 支持8K-32k的上下文;…...

Shell编程之正则表达式(非常详细)
正则表达式 1.通配符和正则表达式的区别2.基本正则表达式2.1 元字符 (字符匹配)2.2 表示匹配次数2.4 位置锚定2.5 分组 和 或者 3.扩展正则表达式4.部分文本处理工具4.1 tr 命令4.2 cut命令4.3 sort命令4.4 uniq命令 1.通配符和正则表达式的区别 通配符一般用于文件…...

RNN模型简单理解和CNN区别
目录 神经网络:水平方向延伸,数据不具有关联性 RNN:在神经网络的基础上加上了时间顺序,语义理解 RNN: 训练中采用梯度下降,反向传播 长短期记忆模型 输出关系:1 toN,N to N 单入…...

【Axure高保真原型】JS日期选择器筛选中继器表格
今天和大家分享JS日期选择器筛选中继器表格的原型模板,通过调用浏览器的日期选择器,所以可以获取真实的日历效果,具体包括哪一年二月份有29天,几号对应星期几,都是真实的,获取日期值后,通过交互…...
android bp脚本
一。android大约从7.0开始引入 .bp文件代替以前的.mk文件,用于帮助android项目的编译配置文件。 二。mk文件转化为bp文件,可以使用下面命令转化,注意命令中>,这是写入文件。androidmk是android源码自带的工具,他可…...

Redis 数据库 NoSQL
目录 一、NoSQL 二、为什么会出现NoSQL技术 三、NoSQL的类别 键值(Key-Value)存储数据库 列存储数据库 文档型数据库 图形(Graph)数据库 四、NoSQL适应场景 五、在分布式数据库中CAP原理 1、CAP 2、BASE 一、NoSQL NoS…...
RN 项目异常问题整理
常见问题 无法找到 CardStackStyleInterpolator StackViewStyleInterpolator 这个方法集来代替 CardStackStyleInterpolator的,这个方法集的路径也需要注意一下,在2.12.1版本之前, 该文件在react-navigation/src/views/StackView/中…...

STM8编程[TIM1多路PWM输出选项字节(Option Byte)操作和IO复用]
TIM1多路PWM输出选项字节(Option Byte)操作和IO复用 本文摘录于:https://blog.csdn.net/freeape/article/details/47008033只是做学习备份之用,绝无抄袭之意,有疑惑请联系本人! 代码上要使用TIME1输出3路PWM,代码如下: void tim…...

Java算法_ 反转二叉树(LeetCode_Hot100)
题目描述:给你一棵二叉树的根节点 ,翻转这棵二叉树,并返回其根节点。root。 获得更多?算法思路:代码文档,算法解析的私得。 运行效果 完整代码 /*** 2 * Author: LJJ* 3 * Date: 2023/8/16 13:18* 4*/public class In…...
C/C++ 标准模版库STL(持续更新版)
标准模版库STL 目录 算法库 栈 队列 向量 映射 列表 双向链表 集合 Iterator 送代器 <algorithm> 算法库 max, min 用于找出一组值中的最大值和最小值 swap 用于交换两个变量的值 sort 用于对一个范围内的元素进行排序 lower_bound, upper_bound 用于在已排序的容器…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...

基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...

wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...

windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
Electron简介(附电子书学习资料)
一、什么是Electron? Electron 是一个由 GitHub 开发的 开源框架,允许开发者使用 Web技术(HTML、CSS、JavaScript) 构建跨平台的桌面应用程序(Windows、macOS、Linux)。它将 Chromium浏览器内核 和 Node.j…...

【Linux】使用1Panel 面板让服务器定时自动执行任务
服务器就是一台24小时开机的主机,相比自己家中不定时开关机的主机更适合完成定时任务,例如下载资源、备份上传,或者登录某个网站执行一些操作,只需要编写 脚本,然后让服务器定时来执行这个脚本就可以。 有很多方法实现…...