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 用于在已排序的容器…...

ARM(实验二)
uart4.h #ifndef __H__ #define __H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h"//RCC/GPIO/UART4章节初始化 void hal_uart4_init();//发送一个字符函数 void hal_put_char(const char str);//发…...

由“美”出发 听艺术家林曦关于美育与智慧的探讨
不久前,林曦老师与我们的老朋友「十点读书」进行了一次线上直播,有关林曦老师十余年的书法教学,和传统美育的心得,以及因此诞生的新书《无用之美》。 这一次的直播,由“美”的主题出发,延伸出美育…...

Serial与Parallel GC之间的不同之处是什么?
Serial GC(串行垃圾回收器)和Parallel GC(并行垃圾回收器)都是Java虚拟机(JVM)中用于进行垃圾回收的两种基本算法。它们在性能、资源利用和回收效率等方面存在一些不同之处。下面是它们之间的详细比较: 1.工作方式 Serial GC:它是一种单线程的垃圾回收器…...

GB28181设备接入侧如何对接外部编码后音视频数据并实现预览播放
技术背景 我们在对接GB28181设备接入模块的时候,遇到这样的技术诉求,好多开发者期望能提供编码后(H.264/H.265、AAC/PCMA)数据对接,确保外部采集设备,比如无人机类似回调过来的数据,直接通过模…...

【java】为什么文件上传要转成Base64?
文章目录 1 前言2 multipart/form-data上传3 Base64上传3.1 Base64编码原理3.2 Base64编码的作用 4 总结 1 前言 最近在开发中遇到文件上传采用Base64的方式上传,记得以前刚开始学http上传文件的时候,都是通过content-type为multipart/form-data方式直接…...

SCSS 学习笔记 和 vscode下载live sass compiler插件配置
1、下载livelive sass compiler插件并配置 // 在 已有代码 下面 添加下面 代码,一般刚刚下载打开最后一行是:// "liveSassCompile.settings.autoprefix": [],// 所以直接 把下面复制进去保存就行"liveSassCompile.settings.autoprefix&qu…...

CSS中的字体属性有哪些值,并分别描述它们的作用。
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ font-style⭐ font-weight⭐ font-size⭐ font-family⭐ font-variant⭐ line-height⭐ letter-spacing⭐ word-spacing⭐ font⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专…...

机器学习笔记之优化算法(十五)Baillon Haddad Theorem简单认识
机器学习笔记之优化算法——Baillon Haddad Theorem简单认识 引言 Baillon Haddad Theorem \text{Baillon Haddad Theorem} Baillon Haddad Theorem简单认识证明过程证明:条件 1 ⇒ 1 \Rightarrow 1⇒ 条件 2 2 2证明:条件 3 ⇒ 3 \Rightarrow 3⇒条件 1…...

HighTec工程用命令行编译
当工程中含有太多模型生成的代码的时候,如果修改了一部分代码,HighTec自带的编译器编译时间会非常的慢,有的需要半个小时甚至一个小时,这是因为每次修改之后HighTec都会从头重新检索更新,太浪费时间了,于是…...

【C语言】每日一题(找到所有数组中消失的数字)
找到所有数组中消失的数字,链接奉上。 这里简单说一下,因为还没有接触到动态内存,数据结构,所以知识有限,也是尽力而为,结合题库的评论区找到了适合我的解法,以后有机会,会补上各种…...