【MySQL】MySQL表的增删改查(进阶篇)——之约束条件

news2024/11/23 15:44:51

前言:

🌟🌟本期讲解关于MySQL表增删查改进阶篇,希望能帮到屏幕前的你。

🌈上期博客在这里:http://t.csdnimg.cn/cF0Mf

🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客

 

目录

📚️1.引言

📚️2.NOT NULL的使用

2.1添加数据约束

2.2修改数据约束 

📚️3.DEFAULT的使用

📚️4.UNIQUE的使用

4.1添加数据约束

4.2修改数据约束

📚️5.PRIMARY  KEY的使用

5.1存在多个primary key时 

5.2插入数据约束

5.3修改数据约束

5.4自增主键分配机制

📚️6.FOREIGN KEY的使用

📚️7.总结


 

📚️1.引言

      Hello!!!家人们,小编上期期讲解了关于增删查改的基础操作~~~,关于数据库表的增删查改有了一定的认知,小编这期就将深入讲解另一部分内容,即关于数据库增删查改的进阶操作之约束条件,大家准备好了吗~~~🥳🥳🥳;

讲解内容:

📍1.NOT  NULL:指示某列不能存储 NULL 值

📍2.UNIQUE:保证某列的每行必须有唯一的值

📍DEFAULT:规定没有给列赋值时的默认值

📍PRIMARY  KEY:NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录

📍FOREIGN  KEY: 保证一个表中的数据匹配另一个表中的值的参照完整性

看不懂???没关系!! 且听小编进行讲解,包你学会!!! 

📚️2.NOT NULL的使用

SQL执行语句示范:

create table 表名(列名,列名 ONT NULL,......);

代码示范如下:

mysql> create table test99(id int not null,name varchar(10));
Query OK, 0 rows affected (0.01 sec)

2.1添加数据约束

如上我们在表的某个列添加了约束条件后,MySQL就可以进行判断我们写的数值是否合理。

添加时进行约束:

mysql> insert into test99 values(1,'孙悟空'),(null,'唐三藏');
ERROR 1048 (23000): Column 'id' cannot be null

mysql> desc test99;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+


mysql> insert into test99 values(1,'孙悟空'),(2,'唐三藏');
Query OK, 2 rows affected (0.00 sec)

注解:此时我们就可以看到这里唐三藏的数值id设置为NULL后,就无法进行添加进入数据库表中,那么此时我们进行表的结构查看后,NULL的值改为no了;

我们再次改变“唐三藏”的数值id后就能够进行数据的插入即添加了;

2.2修改数据约束 

和上述添加一样,修改时也会进行约束;

修改时约束:

mysql> update test99 set id=null where name='孙悟空';
ERROR 1048 (23000): Column 'id' cannot be null
mysql> -- 此时可以发现由于约束条件,不能修改

注意:此时小编就将“孙悟空”的数值id改为了null,此时就不能够完成修改这个操作;

📚️3.DEFAULT的使用

SQL执行语句:

create table 表名(列名 类型,列名 类型 default '默认的内容');

我们在不添加约束条件,查看表的结构:

mysql> create table student(id int,name varchar(10));
Query OK, 0 rows affected (0.01 sec)

mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

此时我们添加表之后,可以发现这里的Default默认为NULL,所以我们就能够对他进行操作;

添加约束条件:

mysql> create table student(id int,name varchar(10) default'未命名');
Query OK, 0 rows affected (0.02 sec)

mysql> desc student;
+-------+-------------+------+-----+-----------+-------+
| Field | Type        | Null | Key | Default   | Extra |
+-------+-------------+------+-----+-----------+-------+
| id    | int(11)     | YES  |     | NULL      |       |
| name  | varchar(10) | YES  |     | 未命名    |       |
+-------+-------------+------+-----+-----------+-------+
2 rows in set (0.00 sec)

mysql> insert into student(id) values(1);
Query OK, 1 row affected (0.02 sec)

mysql> select * from student;
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | 未命名    |
+------+-----------+

注解:这里在添加约束条件后,再次查看表的结构,可以发现此时的default变为了‘未命名’,再次插入数据时,不给名字进行数据填入,此时就会默认为‘未命名’

📚️4.UNIQUE的使用

SQL执行语句:

create table 表名(列名 类型 unique.....)

约束代码如下:

mysql> create table student(id int unique,name varchar(10));
Query OK, 0 rows affected (0.02 sec)

4.1添加数据约束

这里在第二次添加数据时,会进行约束

mysql> insert into student values(1,'孙悟空'),(1,'猪八戒');
ERROR 1062 (23000): Duplicate entry '1' for key 'id'

注解:这里的报错就是说明id这个1被约束后,不能再次出现,重复了;

4.2修改数据约束

mysql> insert into student values(1,'孙悟空'),(2,'猪八戒');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> update student set id=1 where name='猪八戒';
ERROR 1062 (23000): Duplicate entry '1' for key 'id'

注解当我们成功添加进去两个数据之后,再次修改id为1,已经存在的id时,可以发现不能修改

📚️5.PRIMARY  KEY的使用

SQL执行语句:

create table 表名(列名 类型 primary key);

5.1存在多个primary key时 

由于一张表里只能存在一个primary key时,表里只能存在一个身份标识;

mysql> create table student(id int primary key,name varchar(10) primary key);
ERROR 1068 (42000): Multiple primary key defined

注解:这里会报错,即多次定义了primary key;

5.2插入数据约束

代码如下:

mysql> insert into student values(1,'猪八戒'),(null,'孙悟空'),(1,'沙悟净');
ERROR 1048 (23000): Column 'id' cannot be null
mysql> insert into student values(1,'猪八戒'),(1,'沙悟净');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

 注意:这里有两处报错,第一是id不能为空,第二处是这里的重复定义了id为1。所以这里的约束条件就是not null和unique的合并

5.3修改数据约束

 代码如下:

mysql> update student set id=1 where name='沙悟净';
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

mysql> update student set id=null where name='沙悟净';
ERROR 1048 (23000): Column 'id' cannot be null

注解:此时可以看到这里和上述的插入数据情况一样,小编就不再过多解释了;重复和null都是不能存在的;

5.4自增主键分配机制

代码实例如下:

mysql> create table student(id int primary key auto_increment,name varchar(10));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into student values(null,'孙悟空'),(null,'猪八戒'),(10,'孙悟空'),(null,'猪八戒');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> select * from student;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | 孙悟空    |
|  2 | 猪八戒    |
| 10 | 孙悟空    |
| 11 | 猪八戒    |
+----+-----------+

注解

在primary key之后加入auto_increment可以实现主键自动分配;

主键最开始从1开始进行分配,若自主定义了id,就从定义id的最大值开始自主分配;

这里的自主分配是不能够定义约束在varchar类型的数据上;

📚️6.FOREIGN KEY的使用

这里的约束即为外键,可以用来建立两个表之间的联系;

SQL执行语句:

create table 表名(列名 类型,列名 类型,foreign key(被约束的列)references 父类表(参考列));

看读懂没关系,且听小编给你分析:

代码如下:

mysql> create table class(classid int primary key,name varchar(10));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into class values(1,'树莓一班'),(2,'树莓二班'),(3,'树莓三班'),(4,'树莓四班');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from class;
+---------+--------------+
| classid | name         |
+---------+--------------+
|       1 | 树莓一班     |
|       2 | 树莓二班     |
|       3 | 树莓三班     |
|       4 | 树莓四班     |
+---------+--------------+

 此时我们新建一个办班级,它的id和名字如上;

然后我们安排几个学生,那么此时学生的班级id就只能是上述班级其中之一,即这两个表位父子关系,那么此时我们就要使用foreign key约束条件,进行两个表的联系;

代码如下:

mysql> create table student(classid int,name varchar(10),foreign key(classid) references class(classid));
Query OK, 0 rows affected (0.00 sec)

那么此时就已经建立了联系;

那么是如何进行书写的呢???

此时我们在插入数据时,学生的班级id就不能够不是父类表的班级id之外了,这里小编就不再过多演示;

注解:

1.在指定列进行关联的时候,父类的这一类必须是主键或者是unique;

2.子类的与父类关联的列,插入和修改会被父类约束,但是其他的列,可以随意修改和插入;

3.在删除时,由于父类时子类表的参考,所以无法先删除父表,得先删除子类的表后,然后再次删除父类这个表。

📚️7.总结

💬💬小编这期总结了关于数据库表的操作的进阶,即在原有的基础上讲解了表的约束条件,当然,小编任然附上了相关代码,供小伙伴们参考~~~

🌅🌅🌅~~~~最后希望与诸君共勉,共同进步!!!


                                💪💪💪以上就是本期内容了, 感兴趣的话,就关注小编吧。

                                                               😊😊  期待你的关注~~~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是监督学习(Supervised Learning)

一、监督学习概述 监督学习(Supervised Learning)是一种极具威力的机器学习方法,能够训练算法以识别数据中的模式,并据此进行精准的预测或分类。借助已有的标记数据,监督学习模型学会了从输入到输出的映射关系&#x…

导弹制导方式简介-其实跟卫星定位系统关系不大

导弹制导方式其实跟卫星定位系统关系不大,所以所谓关闭卫星定位系统导弹就不能打是谣言! 导弹制导是指利用不同的方式,选择飞行路线,将具有动力飞行的弹头移动一段距离之后,击中预先设定的目标。导弹制导系统利用其中…

【网络】十大网络协议

文章目录 1. HTTP(HyperText Transfer Protocol,超文本传输协议)2. HTTPS(Secure Hypertext Transfer Protocol,安全超文本传输协议)3. HTTP/34. TCP(Transmission Control Protocol&#xff0c…

树莓派5-番外篇-GPU相关-学习记录2

树莓派5-番外篇-GPU相关 要查看你的树莓派5是否支持GPU计算,以及如何启用和使用它,你需要了解树莓派5的硬件配置和当前的驱动支持情况。以下是查看树莓派5的GPU支持情况的步骤。 树莓派5 GPU 支持概述 树莓派5 使用的是 Broadcom BCM2712 处理器&…

大数据新视界 --大数据大厂之Hive与大数据融合:构建强大数据仓库实战指南

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Ps初步使用教程

1.画面快捷键 Ctrl鼠标滚轮:画面左右移动 Shift鼠标滚轮:画面上下快速移动(不加Shift正常速度移动) Alt鼠标滚轮:画面大小缩放 2.工具快捷键 ShiftG:渐变、油漆桶、3D材质施放 切换 CtrlO&#xff1a…

【Unity3D】如何用MMD4Mecanim插件将pmx格式模型转换为fbx格式模型

文章目录 概要一、下载MMD4Mecanim插件并导入U3D1.1 下载链接1.2 导入过程 二、将.pmx模型转换为.fbx模型三、其他参数设置3.1 VMD参数3.2 Animations 概要 在Unity的环境下,想要将.pmx格式的3D模型转换为.fbx是有可以用的插件的,并不需要某些教程中那么…

Vue3+TypeScript二次封装axios

安装如下 npm install axios 第一步:创建config配置文件,用于存放请求后端的ip地址,用于后期打包后便于修改ip地址。 注:typescript要求参数要有类型。(ES6 定义对象 属性 类型 修改的是属性的值) inte…

超级干货|AI产品经理6大知识体系,【附零基础小白入门指南】

想要转行AI产品经理的宝子,这6大知识体系是你入门的基础 💥基础知识:AI产品的根基 💥平台和硬件支持:AI产品的技术基础设施 💥AI核心技术:推动产品创新的引擎 💥行业实践应用&#…

Python计算机视觉 第8章-图像内容分类

Python计算机视觉 第8章-图像内容分类 8.1 K邻近分类法(KNN) 在分类方法中,最简单且用得最多的一种方法之一就是 KNN(K-Nearest Neighbor ,K邻近分类法),这种算法把要分类的对象(例如一个特征…

知网合作商AEPH出版,学生/教师均可投稿,优先录用教育社科领域,往期最快2周见刊

AEPH出版社旗下有5本学术期刊,专门出版自然科学、社会科学研究与教育领域论文的高影响力期刊,拥有正规ISSN号,出版类型涉及应用和理论方面的原创和未曾公开发表的研究论文,分配独立DOI号。AEPH作为中国知网(CNKI&#…

COCOS:(飞机大战01)背景图无线循环向下滚动

飞机大战知识点总结 背景图宽高:480*852 将背景图移动到Canvas中 设置图2的Y轴为852,这样图1和图2就衔接上了 创建控制背景的ts文件 import { _decorator, Component, Node } from cc; const { ccclass, property } _decorator;ccclass(Bg) export cla…

HTTPS证书申请

🌐 JoySSL CA机构 机构介绍:JoySSL是网盾安全基于全球可信顶级根创新推出的新一代https数字证书,也是目前为数不多的中国自主品牌SSL证书。 服务特点:JoySSL携手全球权威CA机构,全球多节点服务器验证签发,安…

MySQL系列—8.存储结构

目录 1.系统表空间 ibdata 2.通用表空间 .ibd 3.独立表空间 4.Undo 表空间 5.临时表空间 6.Redo Log File 1.系统表空间 ibdata 系统表空间由参数innodb_data_file_path定义路径、初始化大小、自动扩展策略 如: innodb_data_file_path/dayta/mysql/ibdata1:…

【机器学习】C++与OpenCV实战:创建你的第一个图片显示程序

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 前言 在计算机视觉领域,OpenCV是一个非常强大的开源库,它提供了大量的图像处理和计算机视觉功能。C与Op…

这次我可真没手写代码

我是一个平平无奇的程序员,兢兢业业地做着公司的需求,直到那天,一位十年见过两面的亲戚突然找上门,他说: 小Z啊,听说你是学计算机的对吧。 听完这话,我当场汗流浃背,这不是让我上门修…

Web组件:Servlet Listener Filter

1 前言 1.1 内容概要 掌握ServletContextListener的使用,并且理解其执行时机掌握Filter的使用,并且理解其执行时机能够使用Filter解决一些实际的问题 1.2 前置知识准备 Servlet的执行 ServletContext的功能和使用 2 Web组件 JavaEE的三大Web组件 …

Aigtek功率放大器在超声检测陶瓷复合材料内部缺陷中的应用

2023年5月30日,神舟十六号载人飞船于9时28分左右在酒泉基地正式发射。本次神舟十六号最引人注目的一点就是它的元件国产率相较之前是大大提高了。选择提高自主研发能力,一方面是防范他国在技术、贸易上的“卡脖子”隐患,一方面也是我国制造实…

【智慧物流】新中地智慧城市实训:优秀学生项目作品1

实训结束后,同学们在最后的答辩中纷纷展现了自己的优秀成果,并以小组的形势进行汇报。今天截取部分学生优秀作品给大家进行展示,帮助大家快速了解智慧系列项目的效果。 智慧城市开发项目主题:智慧物流 (为保护学生隐…

亲测好用,ChatGPT 3.5/4.0新手使用手册,最好论文指令手册~ 【2024年9月 更新】

本以为遥遥领先的GPT早就普及了,但小伙伴寻找使用的热度一直高居不下,其实现在很简单了! 国产大模型快200家了,还有很多成熟的国内AI产品,跟官网一样使用,还更加好用~ ① 3.5 大多数场景是够用的&#xff…