前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【MySQL】MySQL表的增删改查(进阶篇)——之约束条件

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

作者头像
用户11288949
发布2024-09-24 13:58:52
1070
发布2024-09-24 13:58:52
举报
文章被收录于专栏:用户11288949的专栏

📚️1.引言

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

讲解内容:

📍1.NOT NULL:指示某列不能存储 NULL 值 📍2.UNIQUE:保证某列的每行必须有唯一的值 📍DEFAULT:规定没有给列赋值时的默认值 📍PRIMARY KEY:NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录 📍FOREIGN KEY: 保证一个表中的数据匹配另一个表中的值的参照完整性

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

📚️2.NOT NULL的使用

SQL执行语句示范:

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

代码示范如下:

代码语言:javascript
复制
mysql> create table test99(id int not null,name varchar(10));
Query OK, 0 rows affected (0.01 sec)
2.1添加数据约束

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

添加时进行约束:

代码语言:javascript
复制
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修改数据约束

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

修改时约束:

代码语言:javascript
复制
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 '默认的内容');

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

代码语言:javascript
复制
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,所以我们就能够对他进行操作;

添加约束条件:

代码语言:javascript
复制
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.....)

约束代码如下:

代码语言:javascript
复制
mysql> create table student(id int unique,name varchar(10));
Query OK, 0 rows affected (0.02 sec)
4.1添加数据约束

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

代码语言:javascript
复制
mysql> insert into student values(1,'孙悟空'),(1,'猪八戒');
ERROR 1062 (23000): Duplicate entry '1' for key 'id'

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

4.2修改数据约束
代码语言:javascript
复制
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时,表里只能存在一个身份标识;

代码语言:javascript
复制
mysql> create table student(id int primary key,name varchar(10) primary key);
ERROR 1068 (42000): Multiple primary key defined

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

5.2插入数据约束

代码如下:

代码语言:javascript
复制
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修改数据约束

代码如下:

代码语言:javascript
复制
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自增主键分配机制

代码实例如下:

代码语言:javascript
复制
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 父类表(参考列));

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

代码如下:

代码语言:javascript
复制
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约束条件,进行两个表的联系;

代码如下:

代码语言:javascript
复制
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.总结

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

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


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

😊😊 期待你的关注~~~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 📚️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.总结
                  相关产品与服务
                  云数据库 MySQL
                  腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档