草庐IT

MySQL增删改查【进阶篇】万字图文超详细讲解

Moon Bay 2023-04-08 原文

MySQL进阶增删改查[图文超详细讲解]

一.创建数据库约束

1.1约束类型

not null - 指示某列不能存储 null值。
unique - 保证某列的每行必须有唯一的值。
default - 规定没有给列赋值时的默认值。
primary key - 是 (not null 和 unique )的结合确保某列(或两个列多个列的结合)有唯一标识有助于更容易更快速地找到表中的一个特定 的记录。
foreign key - 保证一个表中的数据匹配另一个表中的值的参照完整性。
check - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。

1.2not null约束

创建表时,可以指定某列不为空:
如果插入空值就会报错
可以多设置not null来限制多列

create table student (
id int not null,
sn int ,
name varchar(20)
);

1.3unique :唯一约束(约束列)

**指定sn列为唯一的、不重复的:

create table student (
id int not null,
sn int unique,
name varchar(20)
);

重复输入带有 unique列约束列的值会插入失败

1.4default :默认值约束

指定插入数据时,name列为空,默认值可以自己设置例如"匿名":

create table student (
id int not null,
sn int unique,
name varchar(20) default 'unkown'
);

**

1.5primary key : 主键约束(常用)

指定id列为主键:(有primary key 约束条件存在就可以省去null约束和唯一约束)
但是主键只能对一个列进行约束

create table student (
id int  primary key,
sn int unique,
name varchar(20) 
);

对于整数类型的主键,常配搭自增长auto_increment来使用,插入数据对应字段不给值时,使用最大
值+1。

create table student (
id int  primary key auto_increment,
sn int unique,
name varchar(20) default 'unkown'
);


我们可以在插入时输入id可是不输入,再插入后数据库的表会自己生成自增主键约束那个列来进行自增长+1

如果我们在插入中没有进行默认自增长插入,当我们想插入的某一值后,再进行默认自增主键插入后,会在我们刚插入的数据后进行自增长

1.6foreign key : 外键约束(两表进行关联)

创建学生表student,一个学生对应一个班级,一个班级对应多个学生
我们可以创建两个表,班级表来当做"父表" 学生表来当成"子表"

classes_id为外键,关联班级表id
create table student (
id int  primary key auto_increment,
name varchar(20),
classId int,
foreign key (classesId) references class(classId)
);

这里我们就用classId来进行班级和学生进行了关联

这里我们在student子表进行插入班级Id为100时,当创建父表没有这个classId列中没有100就会报错,所以student子表插入失败

当我们进行将原classId进行修改后100可以发现,会发生修改错误,修改的classId在附表class中存在的classId中存在,我峨嵋你就会插入成功

当我们想要删除父表class中的classId时我们会发现,我们并不能删除或者修改,也就是当class 与 student中由classId这已关联就不可以在父表class进行删除或者修改有关联的classId了,同理我们可以删除class 与 student中由classId这无关联的数据

二.表的顺序

2.1 一对一

一对一就是输入一个信息就可以找到这个人:如这身份证就是这个人的独特唯一身份信息

2.2 一对多

就是一条信息对应一个群体,例如:一个班级了有很多学生,我们可以知道这个班级里学生的学号,如上述外键约束同理

2.3 多对多

代表不同的对象相互之间都是由关系,但不是相互的唯一的信息,如: 大学中高数这一门课程,这节课可以由很多班级或者院校的同学去上课,学生也可以选择去上一些大学物理,大学英语这样课.

2.4语句示例

– 创建课程表:

create table course (
id int primary key auto_increment,
name varchar(20)
);
create table student (
id int primary key auto_increment,
name varchar(20)
);

创建学生-课程的中间表:

create table score (
student_id int,
course_id int,
foreign key (student_id) references student(id),
foreign key (course_id) references course(id)
);

三.新增

3.1新增进阶操作

创建两张表,当我们发现这两张表 列个数相同,数据类型相同,我们就可以执行 insert into B select * from A;
这样我们就可以完成插入,成功将A表的数据插入B表中


我们删除B表重现创建与A表列相同数据类型想反的表B;输入insert into B select name,id from A;
注解:当我们进行两个表插入时,我们只需要列表个数相同,并且列表数据类型相等就可以进行插入,但是这样操作大多数没有意义,新增语句操作后是存储到硬盘中,所以我们要注意此操作,防止弄巧成拙.

四.查询

4.1聚合查询(单表查询)

4.11聚合函数

函数 ------------------------ 说明
COUNT(expr) 返回查询到的数据的 数量
SUM(expr) 返回查询到的数据的 总和,不是数字没有意义
AVG(expr) 返回查询到的数据的 平均值,不是数字没有意义
MAX(expr) 返回查询到的数据的 最大值,不是数字没有意义
MIN(expr) 返回查询到的数据的 最小值,不是数字没有意义

select count(列名) from 表名;

count 是我们在查询中查询输入列名的总行数

我们发现chinese这一列也是8行,但是在我们查询中只会显示出7行,这就代表带有null的行数是不会计入count查询结果中

当我们进行有null的行和无null行的两个列进行count查询会发现只会查询没有null行的数据所以id有10行但是count只查询9行

sum操作:根据这(一列或者多列)进行整体相加(只能针对数字进行运算,不能针对字符串进行运算)
我们也可以用where来进行条件操作



avg(平均数)
max(最大数)
min(最小数)
这些查询语句都和上述类似就简单略过了.

4.12group by 子句查询

group by(列名) 根据行的值来进行分组,将行相同值分为一组
我们先执行group by(列名)后在执行前面的操作

我们可以执行where语句来进行条件查询

4.1.3having

having查询语句时时在group by 分组后进行条件查询
我们也可以用where 和 having来进行搭配条件查询


4.2联合查询(多表查询)

实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积:
也就是将两个表每一行和另一表的每一行进行联合查询

如下

在查询中我们会发现有我们不需要的数据,这样我们就可以来进行where来筛选查询

4.2.1内链接

我们先创建一些表

我们在多表查询的会发现有很多数据时多余的

例如我们可来查询许仙的成绩

利用select 列名,列名from(表名)join(表名) on 条件
join on 和where 应用类似(join on了解即可,一般我们使用两个表查询情况下更多会使用where)


我们来进行多表查询

rom 表名 join 表名 on 条件 join 表名 on 条件

4.2.2外连接

我们发现join on 这个条件很麻烦,容易出错
其实我们可以用join on来构造其他链接
select 列名,列名from(表名) inner join(表名) on 条件
select 列名,列名from(表名) left join(表名) on 条件
select 列名,列名from(表名) right join(表名) on 条件

我们来创建两个列与列没有相关联的表



当我们进行联合查询

当我们进行where语句查询后会发现我们有一些需要的数据会丢失

select 列名,列名from(表名) left join(表名) on 条件
我们进行做查询之后jiukey 找到我们需要的数据了

select 列名,列名from(表名) right join(表名) on 条件**
与左链接同理

我们发现内连接和外连接是有表与表的结构不同
如图1.内2.左外3.右外

4.2.3自连接(了解)

自连接是将本身一张表进行行和行转化成列联合查询

同理可以根据where语句进行查询来减少多余数据得到我们想要得到想要的数据

4.2.4合并查询

我们将两个select查询用 union 来进行合并查询
union all是不去重的,我们了解就可以了

当我们在一张表进行查询可以用or

五.内容总结

约束类型

 not null - 指示某列不能存储 null值。
 unique - 保证某列的每行必须有唯一的值。
 default - 规定没有给列赋值时的默认值。
 primary key -(not nullunique )的结合确保某列(或两个列多个列的结合)有唯一标识有助于更容易更快速地找到表中的一个特定          的记录。
 foreign key - 保证一个表中的数据匹配另一个表中的值的参照完整性。
 check - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。

聚合查询

*函数                                          说明
COUNT(expr)                            返回查询到的数据的 数量
SUM(expr)                       返回查询到的数据的 总和,不是数字没有意义
AVG(expr)                      返回查询到的数据的 平均值,不是数字没有意义
MAX(expr)                      返回查询到的数据的 最大值,不是数字没有意义
MIN(expr)                      返回查询到的数据的 最小值,不是数字没有意义

有关MySQL增删改查【进阶篇】万字图文超详细讲解的更多相关文章

  1. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  2. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  3. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  4. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

  5. ruby - 如何使用 ruby​​ mysql2 执行事务 - 2

    我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi

  6. 100个python算法超详细讲解:画直线 - 2

    1.问题描述使用Python的turtle(海龟绘图)模块提供的函数绘制直线。2.问题分析一幅复杂的图形通常都可以由点、直线、三角形、矩形、平行四边形、圆、椭圆和圆弧等基本图形组成。其中的三角形、矩形、平行四边形又可以由直线组成,而直线又是由两个点确定的。我们使用Python的turtle模块所提供的函数来绘制直线。在使用之前我们先介绍一下turtle模块的相关知识点。turtle模块提供面向对象和面向过程两种形式的海龟绘图基本组件。面向对象的接口类如下:1)TurtleScreen类:定义图形窗口作为绘图海龟的运动场。它的构造器需要一个tkinter.Canvas或ScrolledCanva

  7. H2数据库配置及相关使用方式一站式介绍(极为详细并整理官方文档) - 2

    目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式

  8. ruby-on-rails - 当我通过 rvm 使用 rails3 时,如何在 ubuntu 上安装 mysql2 gem? - 2

    我正在尝试绕过rails配置这个极其复杂的迷宫。到目前为止,我设法在ubuntu上设置了rvm(出于某种原因,ruby在ubuntu存储库中已经过时了)。我设法建立了一个Rails项目。我希望我的测试项目使用mysql而不是mysqlite。当我尝试“rakedb:migrate”时,出现错误:“!!!缺少mysql2gem。将其添加到您的Gemfile:gem'mysql2'”当我尝试“geminstallmysql”时,出现错误,告诉我需要为安装命令提供参数。但是,参数列表很大,我不知道该选择哪些。如何通过在ubuntu上运行的rvm和mysql获取rails3?谢谢。

  9. 华为ensp详细安装包、安装教程及所遇问题 - 2

    目录一、安装包链接二、安装详细步骤1.安装Wireshark和WinPcap2.安装OracleVMVirtualBox3.安装ensp三、安装后注册四、启动路由器出现40错误怎么解决一、安装包链接二、安装详细步骤链接:https://pan.baidu.com/s/1QbUUYMOMIV2oeIKHWP1SpA?pwd=xftx提取码:xftx1.安装Wireshark和WinPcap找到Wireshark安装包所在文件夹,双击它,按照以下步骤安装。2.安装OracleVMVirtualBox找到OracleVMVirtualBox安装包所在文件夹,双击它,按照以下步骤安装。注:可自定义安装

  10. Centos7-yum安装mysql-修改密码-无密码登录-安全配置 - 2

    目录1、yum安装mysql修改密码(1)在mysql里面修改(2)第二种方式,利用mysqladmin修改密码2、没有密码,登录mysql修改密码3、mysql的安全设置1、yum安装mysql在CentOS中默认安装有MariaDB(MySQL的一个分支),安装完成之后可以直接覆盖MariaDB。rpm-qa|grepmariadb查询是否安装了mariadbrpm-e--nodepsmariadb-libs-5.5.60-1.el7_5.x86_64卸载mariadwgethttp://dev.mysql.com/get/mysql57-community-release-el7-11.

随机推荐