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

devtools/2024/9/23 0:57:59/

前言:

🌟🌟本期讲解关于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 nullmysql> 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: 0mysql> 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: 0mysql> 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: 0mysql> 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.ppmy.cn/devtools/109913.html

相关文章

ISO 21434与网络安全管理系统(CSMS)的协同作用

ISO/SAE 21434与CSMS(网络安全管理系统)之间的关系主要体现在以下几个方面: 提供指导框架:ISO/SAE 21434《道路车辆—网络安全工程》是一项国际标准,它为汽车行业提供了实施网络安全管理系统的国际认可的方法和最佳实…

VS配置PCL环境-获取文件目录下所有.lib文件名称

1、打开CMD,切换目录到lib文件所在目录 例如 D:\PCL\3rdParty\Boost\lib 命令提示符输入: C:\Users\admin>D: D:\>cd D:\PCL\3rdParty\Boost\lib 2、提取当前目录所有.lib文件名到0.txt (此处用Boost举例) 输入&#x…

2024最新!Facebook手机版和网页版改名教程!

Facebook作为全球最大的社交平台之一,允许用户自定义名字和昵称。在Facebook更新姓名可以帮助您更好的展现账号形象。本文将为您提供详细的步骤指导,帮助您在手机APP和网页版上轻松完成Facebook改名操作。 Facebook手机版改名 打开Facebook APP并登录账号…

Linux基础指令(三)详解

more补充1(echo和>)重定向补充2>>(追加重定向)补充3补充4制造大文件more 命令的使用 less(自由查找)head (查看头部的内容)tail(查看尾部的内容)查找中间部分方法方法一(思路)方法二 wc(统计文本行数)date(显示时间)时间戳cal(日历)find(查找文件)grep(读取文件中带有…

音视频开发(二)FFmpeg调用avio_open返回Protocol not found的追踪

Protocol not found 近日,在C中使用FFmpeg把一些本地的视频文件,推送到远程RTSP服务器的时候,使用了如下这个过程: avformat_alloc_output_context2() 申请上下文avcodec_find_encoder 找到编码器avcodec_alloc_context3 通过找…

第 4 章:跨域

第 4 章&#xff1a;跨域 1. 同源策略 同源策略(Same-Origin Policy)最早由 Netscape 公司提出&#xff0c;是浏览器的一种安全策略。同源&#xff1a; 协议、域名、端口号 必须完全相同。违背同源策略就是跨域。满足同略策略url可以简写 1.1 同略策略案例 index.html <…

​数据链路层——流量控制可靠传输机制 ​

https://www.cnblogs.com/nekodream/p/18048072 数据链路层的流量控制 较高的发送速度和较低的接收能力的不匹配,会造成传输出错,因此流量控制也是数据链路层的一项重要工作。 数据链路层的流量控制是点对点的&#xff0c;而传输层的流量控制是端到端的。 数据链路层流量控制…

python strip()函数使用

默认情况下去除字符串首尾的空格和换行符号&#xff1b; 但是也可以去掉任意的字符串&#xff0c;可以把首尾的字符串去除到再也找不到为止&#xff0c;但是需要注意可能会由于空格和换行符的存在使得待去除的字符串没有被去除&#xff1a; a "[[1,2,3,4,5], [2,3,4,5]]…