Mysql第四,五连弹(一)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: Mysql第四,五连弹

第四弹

一、💛

主键约束(Primary key):

通过这个约束来指定某一个列作为主键(1.非空,2.不能重复) ,主键:一条数据,身份标识(类似于内存地址

😄😄使用方法:想好某一列了,就在建立表的后面加上primary key

正如下图,他不可以插入值是空的值

那么我们进行数据插入的时候怎么能保证数据不重复呢,一个一个记住或者一个一个尝试都过于麻烦,所以产生了“自增主键” 😈  😈  😈

自增主键:往往是一个整数的ID,要求不可以重复,SQL优化客户端,在插入数据的时候,不主动指定主键的值,而是交给MySQL自行分配,确保分配成功

😄😄使用方法:在某一列的后面加上primary key auto_increment

insert into student values(null,'xx');

null是表示,他去自动安排一个不重复的。

当然了假如你想要自己去决定插入几号几号(主键),也是可以插入的,但是假如插入后,再用null让mysql给我们插入下一个会怎么样呢,看下图

他会接着你的 最大值插入,当然有人会说中间怎么办,这样不会有浪费吗,浪费就浪费呗,无所谓不用患得患失

❗️ ❗️ ❗️

最大值这个问题说一下:

假如是单个节点,没有什么问题。

但是如果mysql是分布式系统,(不同电脑硬件不同,会多台电脑配合使用就叫分布式系统)不同的电脑只记得自己电脑的mysql的最大值,所以这个时候有可能出现重复情况。

补充一下:电脑四大件:CPU,内存,硬盘,网络带宽(一个机器的容量有限,所以加主机数量,可以解决问题)

分布式解决这个问题有特殊方法:

(ID生成算法)可以解决这个问题,这个算法的目标就是保证每个ID唯一

分别由1.主机编号  2.时间戳(小概率同一时间毫秒)3.随即因子,这样由这三个决定的字符ID就可以保证分布式系统唯一性。

二、💙

外键约束

创建外部约束的时候分为父表和子表

注意:受外部约束的时候,也是子表改,父表不改

class为父表,student为子表,

create table student(studentId int primary key auto_increment,name varchar(20),classId int,foreign key (classId)  (他的意思是当前表的那一列受到约束)       references class(classId)class:表示起到约束作用的父表,classId起到约束作用的父表哪一列));

插入或者修改自表中受约束来的数据,就必须保证,插入/修改后的结果,必须要在父表中存在。  

如下图:我们在class里面序号是2,3,4,所以我们student表中不能存在父表中没有的比如1.(constraint:是约束的意思)

注意⚠️

1.针对带有外键约束的插入或者修改,会自己触发查找,看父表有没有。

2.但约束也是双向的,删除或者修改父表中的记录,要看是否被子表使用了(假如使用了,不可以进行修改或者删除)

如下图

3.父类的ID要+unique或者primary

(原因:索引!!

我们在设置外键的时候就会导致操作子表中,频繁查父表,这一个操作,非常耗时间,为了加快查询速度,如果父亲表中(ID这一列就索引就会非常香,primary,unique自带索引),因此约定:没有索引,不能建立这样的外键

三、💜

逻辑删除:

考虑一个场景:建立电商平台    首先分为两块(商品表,订单表)

订单表中的商品要确保商品表中存在(适用于外部约束)

1.实现功能商品下架功能,之前买过某个东西,订单中存在数据,想再来一个,商品中却没有了,假如要删除之类的太麻烦,而且只是下架又不是永远不上了,删除到时候还要添加

所以设置商品表(id ,name,price,ok)(实现商品下架就用update把商品表的ok改成0,获取商品列表,就select的时候加一个条件,and ok=1。(ok=1是商品架子上有的)

这也叫逻辑删除(如同我们之前的线性表,删除是size--,而不是释放空间,很常用)

💤💤💤

下面这个不咋重要,看着玩

check:

某一列要遵守一个具体的表达式,当前的记录符合条件,就是可以插入修改,不符合就会失败,但是mysql5不支持check。

表的设计(设计,依赖一定的经验)。  

实体和关系,设计表的时候需要搞清楚

实体->对象从需求场景,提炼出一些关键性质名词(关系是实体和实体之间关联关系)

关系大体分为四种:

1.一对一:教务系统,一个学生一个号,一个号归一个学生有

分成三种写法:

(1).student (id,name,classId)

     account(accountId,userName,studentId);

(2).student(id,name,accountId)

     account(accountId,userName)

(3).student(id,name,age,username,accountId)    这个是合成一个表混一起弄

2.一对多:一个同学,只存在一个班级中,一个班级可包含多个同学

(1).student(studentId ,name)

     class(classId,className,students)          (students这里面包含多个学生ID)

⚠️⚠️⚠️这么写(mysql)并不推荐,mysql这种类型,不提供“数组”此处要是这么做要按一定的格式,把多个studentId拼成一个字符串,这个过程繁琐且低效。但有些数据库比如(redis)支持数组这样的类型。

(2).class(classId,className)        

     student(studentId,name,classId)           (换成学生在班级,而不是班级有学生)

3.多对多:一个学生多门课,多门课多个学生(查找成绩)。

(1).course(id,name)

    student(id,name)

此时我们需要生成一个关联表

student_course(studentId,courseId)(1号学生选择的语文数学,成绩,这里也就是简写,更具体就自己添加)

4.无关系:没用

上述的1,2,3关系要了解每种关系,表的设计情况(固定套路,很常见,如同(出炮上马一样)

四、 ❤️

新增(把insert和select合并到一起)

把select 查询出来的结果数据,插入另一表中

就是正常插入后面去掉values换成select*表;

如:我么能看见,插入是给student插入的,但是studnet2却也有了student的插入

五、💚

聚合查询:

(查询的时候带表达式是列与列之间的计算,但是假如说行与行就有些无能为力,所以这里出现了聚合查询)

聚合函数

count():查询有多少行数据          

使用方法:select count(*)from student  

⚠️⚠️注意:*和我们正常的列得出的结果不同 ,*的话NULL也算行,但是列的话不算NULL

!!!其次count和(*)之间不可以有空格,大部分的编程语言空格无所谓,但是python,CSS,SQL有奇怪要求

sum():返回数据总和)

把这一行的数据按照double累加,(尝试先把数据转化为double)

当然也有转化不成的情况,但是他不会报错,会报警告

这个操作是来查看警告的:show warnings

avg():返回查询数据的平均值

max():返回查询数据的最大值

min():返回查询数据的最小值


第五弹

一、💓

数据库的设计

要以敏捷和迭代-需求一直在变

实际的敏捷开发,需要持续集成

持续集成,就是保证新开发的功能点能快速稳定的合并到已有的功能中

1.代码能快速合并进去

2.快速的测试(自动化测试=已有的功能+新的功能)

3.快速发布

这三部就是国内有名的模式——小步快跑

二、 💕

分组查询:有时候要把数据分成多组,进行运算

分组查询中,select 指定的是列,必须是group by 指定的列,如果select中想用到其他的列,其他列必须放到聚合函数中,否则直接写没有什么意义

分组查询,也可以搭配条件使用

1.分组之前:where :

对比来看where是先去掉了讲师中的一个10086

2.分组之后:having(先是给他搞平均薪资,然后减去这个最大的,这个老板的平均薪资)

3.一个SQL可以包含分组前和分组后的语句

下面的语句:先是不等于张三,再是按照role分组,在select role 最后是having<20000

实际上我们确实会使用一些复杂的SQL,但是我们平时最好不要写复杂的SQL,这个可读性太差了


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
SQL 关系型数据库 MySQL
MySQL 03
MySQL 03
16 2
|
5月前
|
存储 SQL 关系型数据库
MySQL
MySQL
40 1
|
7月前
|
存储 缓存 关系型数据库
mysql总结(下)
mysql总结
25 0
|
8月前
|
关系型数据库 MySQL 索引
MySQL为什么不推荐使用in
MySQL为什么不推荐使用in
|
9月前
|
SQL 存储 关系型数据库
mysql常见错误汇总
mysql常见错误汇总
99 0
|
SQL 关系型数据库 MySQL
【必知必会的MySQL知识】②使用MySQL
【必知必会的MySQL知识】②使用MySQL
92 0
【必知必会的MySQL知识】②使用MySQL
|
关系型数据库 MySQL
MySQL练习13——where in和not in
MySQL练习13——where in和not in!
|
关系型数据库 MySQL
07_mysql中having的使用_having与where的对比
mysql中having的使用 having与where的对比
147 0
07_mysql中having的使用_having与where的对比
|
SQL 存储 Oracle
Mysql(一)
数据库的常见概念 DB:数据库,存储数据的容器 DBMS:数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件通用的语言
136 0
Mysql(一)
|
存储 关系型数据库 MySQL
初步认识MySQL
初步认识MySQL 1.1 基础认识 MySQL由瑞典MySQL AB开发,目前由Oracle公司收购。开源的关系型数据库管理系统,分为社区版和企业版,没有太大的差异,社区版可以满足绝大多数需求。 1.2 安装MySQL MSI安装(Windows)或ZIP,从官网下载。
1399 0