【MySQL系列】 MySQL表的增删改查(进阶)

☕目录☕

    🍚前言

          🍱一、数据库约束

                      🎂🎂1.1 约束类型

                      🍔🍔1.2 null约束

                      🥧🥧1.3 unique约束

                      🍞🍞1.4 default约束

                      🥮🥮1.5 primary key 约束

                      🧇🧇1.6 foreign key 约束

                      🥩🥩1.7 check约束(了解)

          🥡二、表的设计

                      🍲🍲2.1 “一对一”关系

                      🧀🧀2.2 “一对多”关系

                      🍖🍖2.3 “多对多”关系

          🍜三、新增

          🍰四、查询

                      🥘🥘4.1 聚合查询

                                      🍛🍛🍛4.1.1 聚合函数

                                      🥣🥣🥣4.1.2 分组查询(group by 子句)

                                      🍩🍩🍩4.1.3 having 子句 

                      🍤🍤4.2 联合查询(最复杂的)

                                      🍣🍣🍣4.2.1 笛卡尔积

                                      🍗🍗🍗4.2.2 内连接

                                      🥐🥐🥐4.2.3 外连接

                                      🍟🍟🍟4.2.4 自连接

                                      🌭🌭🌭4.2.5 子查询

                                      🍝🍝🍝4.2.6 合并查询

    🍨后续


前言

老规矩~~

为了本篇博客的学习,先把 MySQL数据库 里面的表 全部都删除掉~~

只留下自己创建的java数据库(自带的数据库肯定是不动的了)~~ 

一、数据库约束

所谓的约束~~

其实就是 数据库可以让程序员定义一些对数据的限制规则,数据库 会在 插入/修改数据的时候,会按照这些规则 对数据进行校验~~

如果校验不通过,就直接报错~~

约束的本质 就是让我们及时发现数据中的错误,更好的保证数据的正确性~~


1.1 约束类型

not null 指示某列不能存储 null值(即 该列是必填项)
unique 保证某列的每行必须有唯一的值
default 规定没有给列赋值时的默认值
primary key not null 和 unique 的结合。确保某列(或两个列或多个列)有唯一标识,有助于更快速的找到 表中的一个特定的记录
foreign 保证一个表中的数据 匹配 另一个表中的值的参照完整性
check 保证列中的值符合指定的条件


1.2 null约束

 此时,先创建一张 student表:

这张表,初始情况下,没有任何的约束,允许为null:

此时,我们完全可以插入空值: 

但是,如果我们加上 not null,那么就不会插入成功了~~

删除上面所创建的 student表:

重新创建一个 student表(有约束条件  not null):

查看 student表 的结构,发现此时 id列不允许为空:

此时,如果再插入空值的时候,会提示报错:id列不允许为空值:

这个是由于创建 student表 的时候,在 id列 设置了 not null~~

使得在下面插入数据的时候,id列 不允许插入空值~~ 


1.3 unique约束

unique约束,是保证 唯一性约束~~

首先,删除 原来的 student表:

先创建一个普通的表(无任何约束):

插入多条相同的记录,发现插入记录都成功了:

此时,查询 student表 的全列数据:

可以看到的是,创建的是普通的表(无unique约束),

此时,是完全可以插入普通的数据的~~ 

默认情况下,表里的数据都是可以重复的~~

现在,重新创建一个 带有unique约束的 student表:

首先,删除上次创建的 普通student表:

接着,创建一个带有unique约束的 student表:

此时,观察 student表 的结构,发现id只能是唯一值:

此时,向 student表里面 插入相同数据,会发现出错了(第一条插入没问题,第二条开始就出错了):

 duplicate:重复~~

 entry:条目~~


1.4 default约束

default约束,就是设定默认值~~

即 当我们插入数据的时候,如果不去指定,那么插入的时候就会自动去填写这个默认值~~

默认情况下的默认值,是null~~

可以通过 default约束 来修改默认的默认值~~

删除旧的 student表:

重新创建一张新的 student表(不加任何限制): 

此时我们可以查看 student表 的结构: 

当我们对表进行指定列插入的时候,就会涉及到默认值的情况的:

此时,我们只针对 id列进行插入,那么 剩下的 name列 就按照默认值来走的: 

那么,我们可以通过 default约束 来修改默认值~~

重新删除 student表: 

创建一张带有 default约束 的 student表:

此时,可以查看表的结构:

那么,此时可以插入数据来观察:

当然,只插入name的话,id就是默认值:


1.5 primary key 约束

primary key 约束,又叫做:主键约束~~

这是在设计表的时候,非常重要的一个列~~

主键表示一条记录的 "身份标识" ,用来区分 这条记录 和 其他的记录~~

主键的要求:

  1. 主键不能为空,相当于 not null
  2. 主键不能重复,相当于 unique
  3. 一个表里只能有一个主键 

首先,删除 原来的 student表:

接着,创建一张带有主键的 student表(一般情况下 把 id 当作主键):

此时,可以查看 student表 的结构,会发现也出现了变化:

当插入数据的时候,

主键不允许为空值,同时主键必须唯一(这里的主键指的是 普通主键):

 

有的人可能会说:主键不能为空,而且必须是唯一的,

也就是说,主键必须填,而且还不能是重复的~~

那么以后填主键的时候,是不是还必须的要好好琢磨琢磨呢?

于是,MySQL为了方便大家填写主键,内置了一个功能 —— "自增主键" ,帮助我们自动生成主键的值,就不用程序员自己来保证了~~

从1开始,依次进行累加~~

自增主键 不是 普通主键,可以手动指定,也可自动生成~~

当我们填入一个具体值的时候,那就是手动指定;

当我们填入null的时候,那就是自动生成(按照自增规则)~~

首先,删除原来的 student表:

接着,创建一张新的 student表(内含 自增主键,自增主键 不是普通主键):

此时,查看 student表 的结构:

现在,插入一些数据:

自增规则:

MySQL要想自增,必须要能够记录下来当前 id已经到哪了~~

还要保证 自增 之后,得是不能重复的~~

MySQL里简单粗暴的做法,直接就是记录当前 自增主键 列里的最大值~~ 

这就能保证自增速度佷快。并且一定是不重复的~~

自增主键,主要就是用来生成一个唯一的 id,来保证不重复~~

如果数据库是分布式部署的~~

这个时候自增主键就要带来问题的~~

分布式,即 数据量太大,一台机器存不下,就需要使用多台机器来存~~

如果只有一个MySQL数据库服务器,那么 肯定自己是知道 当前 id的最大值,也就容易生成下一个唯一的 id~~

但是,如果是分布式部署,有多台机器,就可能有一个MySQL集群了:

每一个MySQL节点只知道自己节点上的最大值,不知道其他节点上的最大值~~

换句话说,每一个MySQL数据库可以生成一个在自己节点上唯一的 id,但是不能保证 自己生成的 id和其他的几个节点的 id是不是重复的~~

但是,生成唯一 id这样的需求,是客观存在的,但是MySQL自增主键,已经难以满足要求了~~

一个典型的解决方案是:在生成 id的时候,让这些节点相互协商一下&#x

评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哎呀是小张啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值