【mysql】深入探索mysql中的各种约束条件

news/2024/10/19 3:25:10/

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:MySQL数据库入门,进阶应用实战必备
景天的主页:景天科技苑

文章目录

  • mysql约束
    • unsigned 无符号
    • not null : 不为空
    • default : 默认值
    • unique: 唯一约束
    • primary key: 主键
    • auto_increment: 自增加一
    • zerofill : 零填充 (配合int使用,不够5位拿0来填充)

mysql_20">mysql约束

mysql中对编辑的数据进行类型的限制,不满足约束条件的报错

unsigned   :    无符号
not null   :       不为空
default    :       默认值
unique     :      唯一值,加入唯一索引
(索引相当于字典目录,索引的提出是为了加快速度,一味地乱加索引不会提高查询效率)
primary key:    主键
auto_increment: 自增加一 ,必须设置了主键才能设置该参数
zerofill   :    零填充
foreign key:    外键

约束在写sql时,放在数据类型的后面,如下,放在int的后面
字段名 类型 约束

unsigned 无符号

create table t3(id int unsigned);
insert into t3 values(-1); error
insert into t3 values(4000000000); success

设置无符号位约束,插入负值就报错
在这里插入图片描述

not null : 不为空

create table t4(id int not null , name varchar(11));
insert into t4 values(1,"张宇");
insert into t4 values(null,"张宇"); error
insert into t4(name) values("李四"); error

设置不为空约束,插入空就报错
在这里插入图片描述

NULL值是处于0和1之间的某个值,他也表示一个值,只不过这个值是NULL值,而不是0。
在进行计算的时候,1与NULL则结果为NULL。而0与NULL则结果为0。
1或NULL则结果为1,0或NULL则结果为NULL;可见NULL值是介于0和1之间的值。
另外非NULL既不是1也不是0,还是NULL

default : 默认值

create table t5(id int not null  , name varchar(11) default "沈思雨" );
insert into t5 values(1,null);
insert into t5(id) values(2);

设置了默认值后,插入时填入值,就是设置的值,非全列插入时,不写该字段的值,就用默认值
在这里插入图片描述

create table t5_2(id int not null  default "1111" , name varchar(11) default "沈思雨" );
insert into t5_2 values(); # 在values里面不写值,默认使用默认值;

在这里插入图片描述

unique: 唯一约束

加入唯一索引(索引的提出是为了加快速度,一味地乱加索引不会提高查询效率,索引是有一个文件来存索引)
唯一 可为null 标记成: UNI

create table t6(id int unique , name char(10) default "赵万里" );
insert into t6(id) values(1);
insert into t6(id) values(1); error
insert into t6(id) values(null);
insert into t6(id) values(null); # id变成了多个null

如果要删除null的字段,可以用 where 字段 is null 来删
唯一性约束,可以有多个null值,不违背唯一性约束
在这里插入图片描述

primary key: 主键

[ 唯一 + 不为null ] PRI 标记数据的唯一特征
一个表中,只能设置一个字段为一个主键,unique唯一约束可以设置多个
创建主键

create table t7(id int primary key , name varchar(10) default "赵沈阳");
insert into t7(id) values(1);
insert into t7(id) values(1); error 
insert into t7(id) values(null); error

设了主键,该字段不能重复,不能为空
在这里插入图片描述

unique + not null => PRI

create table t8(id int unique not null ,  name varchar(10) default "赵沈阳" );

设置了唯一性约束,且不为null,功能就跟primary key一样了
在这里插入图片描述

如果没有设置primary key,设置了unique not null ,默认把unique +not null 设置的字段设为主键
在这里插入图片描述

primary key / unique + not null => 优先把primary key 作为主键;

create table t9(id1 int unique not null ,  id2 int primary key );

同时设置了unique +not null 和 primary key 。优先把primary key 作为主键
在这里插入图片描述

一个表只能设置单个字段为一个主键;

create table t10(id1 int  primary key  ,  id2 int primary key ); error

在这里插入图片描述

auto_increment: 自增加一

一般配合 主键或者unique 使用

create table t11(id int primary key auto_increment , name varchar(255) default "敬文栋");
insert into t11 values(1,"张三");
insert into t11 values(null,"李四");
insert into t11(id) values(null);
# 使用默认值或者自增插入数据
insert into t11 values();

在这里插入图片描述

删除数据,这是删除所有数据
delete from t11;
删除数据 + 重置id
truncate table t11;

主键自增,可以用0,null,default占位
在这里插入图片描述
在这里插入图片描述

删除一条数据后,如果再添加不想主键从下一个开始,需要在添加之前,复位主键
删除数据后,执行下面的sql

如果是中途删除,先查看一下目前的auto_increment

show create table student;| student | CREATE TABLE `student` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL,`age` int NOT NULL,`birthday` date DEFAULT NULL,`is_del` tinyint DEFAULT '0',`height` decimal(3,2) DEFAULT NULL,`cls_id` varchar(6) NOT NULL,PRIMARY KEY (`id`),KEY `fk_class` (`cls_id`),CONSTRAINT `fk_class` FOREIGN KEY (`cls_id`) REFERENCES `class` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 |

AUTO_INCREMENT=几 下次插入时就从几开始递增

ALTER TABLE (表名) AUTO_INCREMENT = 1;
在这里插入图片描述

zerofill : 零填充 (配合int使用,不够5位拿0来填充)

create table t12(id int(5) zerofill);
insert into t12 values(1234567);

位数超了之后,按写入的数据直接插入
在这里插入图片描述

insert into t12 values(12);

位数不足,前面补0
在这里插入图片描述


http://www.ppmy.cn/news/1454570.html

相关文章

Java脚本引擎与动态编译

第一部分 Java脚本引擎简介 Java中的脚本引擎(JDK6)是一种能够在Java程序中执行脚本语言代码的工具。它为开发人员提供了在运行时执行脚本的能力,从而增强了应用程序的灵活性和可扩展性。脚本引擎可以用于各种场景,包括动态配置、业务规则引擎、自定义脚…

零跑新能源动力电池CAN数据采集BMS协议速锐得DBC开发方案

电池系统是电动车发展的瓶颈,除了电池材料外,充电方式是影响电池性能的重要因素。目前,动力电池厂家在电池包中设计一个电池管理系统(Battery Management System,BMS)对电池进行维护,因为电动汽…

产品经理应该懂业务吗?

最近看到一个对新一代产品经理的定义:懂技术、擅运营、会管理、懂业务、能决策 第一反应是:哇偶,产品经理更牛掰了~~~ 说真的,产品经理岗位发展这么多年,还把产品经理定位在十项全能 不是进步,而是倒退。…

使用 SSH 连接 GitHub Action 服务器

前言 Github Actions 是 GitHub 推出的持续集成 (Continuous integration,简称 CI) 服务它提供了整套虚拟服务器环境,基于它可以进行构建、测试、打包、部署项目,如果你的项目是开源项目,可以不限时使用服务器硬件规格&#xff1…

面试口才训练技巧有哪些(3篇)

面试口才训练技巧对于提高面试表现至关重要。以下是三篇关于面试口才训练技巧的详细解析: **篇:基础口才训练与准备 清晰表达:首先,确保你的表达清晰、准确。避免使用模糊、含糊不清的词汇或句子。在回答问题时,尽量…

【6D位姿估计】GDR-Net 单目几何引导的直接回归模型

前沿 本文介绍6D位姿估计的直接回归方法GDR-Net,它从单个RGB图像中确定物体在三维空间中的位置和方向。 它是一个端到端模型,与传统的间接方法不同,GDR-Net可以通过反向传播完全训练,简化了训练过程。 论文地址:GDR…

项目管理-项目沟通管理

项目管理:每天进步一点点~ 活到老,学到老 ヾ(◍∇◍)ノ゙ 何时学习都不晚,加油 1.项目沟通管理-主要内容 项目沟通管理过程--重点: ①ITTO 输入,输出工具和技术。 ②问题和解决方案。 ③论文…

霍尼韦尔HONEYWELL 120HM23-1 微型密封基本开关

微动开关是一种常用的电子元件,它可以实现电路的连接和断开,在电子控制系统中有着广泛的应用。它的原理是:当电路中的电路板接受磁铁的磁场时,微动开关就会发生变化,从而使电路连接或断开。下面是微动开关原理的详细介绍:微动开关…