数据库|【看此篇】初识MySQL—小白真爱??????


文章目录(PS:觉得不错请点赞收藏支持一下)

    • 一、数据库介绍
      • 1.1 概述
      • 1.2 分类
      • 1.3 作用
      • 1.4 特点
    • 二、关系型数据库管理系统
      • 2.1 介绍
      • 2.2 分类
    • 三、SQL的介绍
      • 3.1 概述
      • 3.2 作用
      • 3.3 分类
      • 3.4 说明
  • MySQL 数据库
    • 一、介绍
      • 1.1 概述
      • 1.2 特点
    • 二、数据类型&约束
      • 2.1 数据类型
      • 2.2 数据约束
    • 三、命令行客户端 MySQL
      • 3.1 登录&退出
      • 3.2 数据库操作的 SQL 语句
      • 3.3 表结构操作的 SQL 语句
      • 3.4 表数据操作的SQL语句
    • 四、基本查询
      • 4.1 as 和 distinct 关键字
      • 4.2 where 条件查询
      • 4.3 排序
      • 4.4 分页
      • 4.5 分组
    • 五、聚合函数
      • 5.1 介绍
    • 六、连接查询
      • 6.1 内连接查询
      • 6.2 左连接查询
      • 6.3 右连接查询
      • 6.4 自连接查询
      • 6.5 子查询

一、数据库介绍 1.1 概述
数据库就是存储和管理数据的仓库,数据会按照一定的格式进行存储,用户可以对数据库中的数据进行增加、删除、修改、查询等操作。
1.2 分类
  • 关系型数据库
    • 指采用了关系模型来组织数据的数据库,简单来说,关系模型指的就是二维表格模型,好比 Excel 文件中的表格,强调使用表格的方式存储数据。
    • 核心元素【数据行、数据列、数据表、数据库(数据表的集合)】
    • 常用的数据库【Oracle、Microsoft SQL Sever、MySQL、SQLite】
  • 非关系型数据库
    • 又被称为 NoSQL(Not Only SQL),意思是不仅仅是 SQL,对 NoSQL 最普遍的定义是"非关联型的",强调 Key-Value 的方式存储数据。
    • 常用的非关系型数据库【MongoDB、Redis】
1.3 作用
  • 数据库的作用就是存储和管理数据,比如:我们在淘宝、京东等购物网站浏览的商品,这些数据都会存储在数据库。
1.4 特点
  • 持久化存储
  • 读写速度极高
  • 保证数据的有效性
二、关系型数据库管理系统 2.1 介绍
数据库管理系统(英语全拼: Relational Database Management System,简称 RDBMS) 是为管理关系型数据库而设计的软件系统,也可以理解为它是一个应用软件。
2.2 分类
  • 关系型数据库服务端软件
    • 主要负责管理不同的数据库,而每个数据库里面会有一系列数据文件,数据文件是用来存储数据的,其实数据库就是一系列数据文件的集合。
  • 关系型数据库客户端软件、
    • 主要负责和关系型数据库服务端软件进行通信,向服务端传输数据或者从服务端获取数据。
三、SQL的介绍 3.1 概述
SQL(英语全拼:Structured Query Language) 是结构化查询语言,是一种用来操作RDBMS的数据库的语言,也就是说 SQL 可以操作 Oracle、Microsoft SQL Sever、MySQL、SQLite 等关系型的数据库。
3.2 作用
SQL 的作用是实现数据库客户端和数据库服务端之间的通信,也就是说 SQL 是通信的桥梁。
3.3 分类
  • DQL:数据查询语言,用于对数据进行查询,如:select
  • DML:数据操作语言,对数据进行增加、删除、修改,如:insert、update、delete
  • TPL:事务处理语言,对事务进行处理,如:begin、transaction、commit、rollback
  • DCL:数据控制语言,进行授权与权限回收,如:grant、revoke
  • DDL:数据定义语言,进行数据库、表的管理等,如:create、drop
3.4 说明
  • SQL 语言不区分大小写
  • 对于程序员来说,重点是数据的增、删、改、查,必须熟练编写 DQL、DML,还能够编写 DDL 完成数据库、表的操作,其它操作如 TPL、DCL了解即可。
MySQL 数据库 一、介绍 1.1 概述
MySQL 是一个关系型数据库管理系统,在 Web 应用方面,MySQL 是最好的 RDBMS(英语全拼: Relational Database Management System,关系型数据库管理系统)应用软件,它是由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下产品,MySQL 是最流行的关系型数据库管理系统中的一个。
1.2 特点
  • 开源,不需要支付额外的费用。
  • 支持大型的数据库,可以处理拥有上千万条记录的大型数据库。
  • 使用标准的 SQL 数据语言形式。
  • 可以安装在不同的操作系统,并且提供多种编程语言的操作接口,包括 C、C++、Python、Java等等。
二、数据类型&约束
众所周知,数据库中的数据保存在数据表中,为了在表中更加准确的存储数据,保证数据的正确有效,开发者为表添加了一些强制性的验证,比如:数据类型、约束。
2.1 数据类型
【数据库|【看此篇】初识MySQL—小白真爱??????】数据类型是指在创建表的时候为表中字段指定数据类型,只有数据符合类型要求才能存储起来,使用数据类型的原则:够用就行,尽量使用取值范围小的,这样可以节省更多的存储空间。
  • 常用数据类型
    • 整数:int,bit
    • 小数:decimal
    • 字符串:varchar,char
    • 日期时间:date,time,datetime
    • 枚举类型:enum
  • 说明
    • decimal 表示浮点数,如:decimal(5,2) 表示共存5位数,小数占2位。
    • char 表示固定长度的字符串,如 char(3),如果填充 ‘ab’ 时会补一个空格为 'ab ',3 表示字符数。
    • varchar 表示可变长度的字符串,如 varchar(3),填充 ‘ab’ 时就会存储 ‘ab’,3 表示字符数。
    • 字符串 text 表示存储大文本,当字符大于 4000 时推荐使用,比如技术博客。
    • 对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径。
附录表
  • 整数类型
类型 字节大小 有符号范围(signed) 无符号范围(Unsigned)
TINYINT(tinyint) 1 -128 ~ 127 0 ~ 255
SMALLINT(smallint) 2 -32768 ~ 32767 0 ~ 65535
MEDIUMINT(mediumint) 3 -8388608 ~ 8388607 0 ~ 16777215
INT/INTEGER(int/integer) 4 -2147483648 ~ 2147483647 0 ~ 4294967295
BIGINT(bigint) 8 -9223372036854775808 ~ 9223372036854775807 0 ~ 18446744073709551615
  • 字符串
类型 说明 使用场景
CHAR(char) 固定长度,小型数据 身份证号、手机号、电话、密码
VARCHAR(varchar) 可变长度,小型数据 姓名、地址、品牌、型号
TEXT(text) 可变长度,字符个数大于 4000 存储小型文章或新闻
LONGTEXT(longtext) 可变长度,极大型文本数据 存储极大型文本数据
  • 时间类型
类型 字节大小 示例
DATE(date) 4 ‘2021-01-01’
TIME(time) 3 ‘12:29:59’
DATETIME(datetime) 8 ‘2021-01-01 12:29:59’
YEAR(year) 1 ‘2021’
TIMESTAMP(timestamp) 4 ‘1970-01-01 00:00:01’ UTC ~ ‘2038-01-01 00:00:01’ UTC
2.2 数据约束
约束是指数据在数据类型限定的基础上额外增加的要求。
  • 常见的约束
    • 主键 primary key:物理上存储的顺序,MySQL 建议所有表的主键字段都叫 id ,类型为 int unsigned。
    • 自动增加 auto_increment:必须先定义了键,如:foreign key、primary key,才能使用自动增加,使用时该字段的数据类型必须是整数类型,一个表中只能由一个自动增长字段。
    • 非空 not null:此字段不允许填写空值。
    • 唯一 unique:此字段的值不允许重复。
    • 默认 default:当不填写字段对应的值会使用默认值,如果填写时以填写为准。
    • 外键 foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,不存在则填写失败并抛出异常。
三、命令行客户端 MySQL 3.1 登录&退出
  • 登录命令
mysql -u root -p; -u 后面是登录的用户名 -p 后面时登录密码,如果不填写,回车之后会提示输入密码

  • 退出命令
quit 或 exit 或 ctrl + d

3.2 数据库操作的 SQL 语句
  • 查看所有数据库
show databases;

  • 创建数据库
create database 数据库名 charset=utf8; 例: create database python charset=utf8;

  • 使用数据库
use 数据库名;

  • 查看当前使用的数据库
select database();

  • 删除数据库 !(慎重使用)
drop database 数据库名;

3.3 表结构操作的 SQL 语句
  • 查看当前数据库中所有表
show tables;

  • 创建表
create table 表名( 字段名称 数据类型 可选的约束条件, 字段名称 数据类型 可选的约束条件, ... ); 例: 创建一个学生表,添加学号(id),姓名(name),性别(gender)字段 create table student( id int primary key auto_increment, name varchar(20), gender enum('男','女','保密') );

  • 修改表-【添加字段】
add: 增加alter table 表名 add 字段名 类型 约束;

  • 修改表-【修改字段类型】
modify: 只能修改字段类型或约束,不能修改字段名alter table 表名 modify 字段名 类型 约束; .

  • 修改表-【修改字段名和字段类型】
change: 既能修改字段名还能修改字段类型和约束alter table 表名 change 字段原名 字段新名 类型 约束;

  • 修改表-【删除字段】
drop: 可以删除字段名alter table 表名 drop 字段名;

  • 查看创表SQL语句
show create table 表名;

  • 查看创库SQL语句
show create database 数据库名;

  • 修改表名
alter table 旧表名 rename to 新表名;

  • 删除表 !(慎重使用)
drop table 表名;

3.4 表数据操作的SQL语句
  • 查询数据
1. 查询所有字段 select * from 表名; 2. 查询指定字段 select 字段名1,字段名2... from 表名;

  • 添加数据
1. 为表中所有字段添加数据,值的顺序需要与结构字段的顺序完全一一对应 insert into 表名 values(值1,值2...); 2. 为表中所有字段添加多个数据,值的顺序需要与结构字段的顺序完全一一对应 insert into 表名 values(值1,值2...),(值1,值2...),(值1,值2...)...; 3. 对表中指定的字段添加数据,值的顺序需要与指定的字段名顺序完全一一对应 insert into 表名(字段名1,字段名2) values(值1,值2);4. 对表中指定的字段添加多条数据,值的顺序需要与指定的字段名顺序完全一一对应 insert into 表名(字段名1,字段名2) values(值1,值2),(值1,值2)....;说明: 1. 如果有字段是主键自动增长类型,那么在为表中所有字段添加数据时需要占位,通常使用空值(0 或者 null 或者 default)来进行占位。 2. 为所有字段添加数据时,如果其中一个字段列有默认值可以使用 default 来占位。

  • 修改数据
update 表名 set 字段名1=值1,字段名2=值2... where 条件;

  • 删除数据
delete from 表名 where 条件

四、基本查询 4.1 as 和 distinct 关键字
  • as 关键字
使用 SQL 语句显示结果时,显示的字段名不具备良好的可读性,这时,我们可以使用 as 给字段起一个别名
1. 使用 as 给字段起别名 select id as 序号,name as 名字,gender as 性别 from 表名; 2. 使用 as 给表起别名 1) 如果是单表查询,可以省略表名 select 字段名1,字段名2... from 表名; 2) 表名.字段名 示例: select 表名.字段名1,表名.字段名2... from 表名; 2) 使用 as 给表起别名 示例: select 别名.字段名1,别名.字段名2... from 表名 as 别名;

  • distinct 关键字
distinct : 去除重复数据行select distinct 字段名1,字段名2... from 表名;

4.2 where 条件查询
使用 where 条件查询主要作用于对表中的数据进行筛选,获取到想要的结果。
  • 语法格式
select * from 表名 where 条件;

where 语句支持的运算符【比较运算符、逻辑运算符、模糊查询、范围查询、空判断】
  • 比较运算符查询
比较运算符分别有【=(等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、!=(不等于)、<>(不等于)】
举例 1. 查询 编号字段 大于等于 5 的数据; select * from 表名 where 编号字段名 >= 5; 2. 查询 编号字段 不等于 2 的数据; select * from 表名 where 编号字段名 != 2; 比较好理解就不过多介绍了

  • 逻辑运算符查询
逻辑运算符包括【and、or、not】
举例 1. 查询 编号字段大于5 并且 性别字段为女 的数据; select * from 表名 where 编号字段名 >= 5 and 性别字段名 = '女';

  • 模糊查询
    • like:模糊查询关键字
    • %:表示任意多个任意字符
    • _: 表示一个任意字符
举例 1. 查询 姓名字段 姓为张 的数据; select * from 表名 where 姓名字段名 like '张%'; 2. 查询 姓名字段 姓为张 名是一个字 的数据; select * from 表名 where 姓名字段名 like '张_';

  • 范围查询
    • between … and … 表示在一个连续的范围内查询
    • in 表示在一个非连续的范围内查询
1. 查询 编号字段 3 到 6 的数据; select * from 表名 where 编号字段名 between 3 and 6; 2. 查询 编号字段 3 和 6 的数据; select * from 表名 where 编号字段名 in (3,6);

  • 空判断查询
    • 判断为空使用:is null
    • 判断非空使用:is not null
1. 查询 年龄字段 内容为空 的数据; select * from 表名 where 年龄字段名 is null; 2. 查询 年龄字段 内容不为空 的数据; select * from 表名 where 年龄字段名 is not null; 注意: > 不能使用 where 字段名 = null 判断为空 > 不能使用 where 字段名 != null 判断非空 > null 不等于 '' 空字符串

4.3 排序
  • 语法
select * from 表名 order by 字段名1 desc [字段名2 desc]; 说明: 1. 先按照 字段名1 进行排序,如果 字段名1 的值相同时,则按照 字段名2 排序,以此类推 2. asc 从小到大排序,即升序 3. desc 从大刀小排序,即降序 4. 默认按照 字段名值 从小到大排序 (即 asc 关键字)

  • 举例
1. 查询 所有信息,按 年龄字段 升序排序; select * from 表名 order by 年龄字段名; 2. 查询 所有信息,按 年龄字段 降序排序; select * from 表名 order by 年龄字段名 desc;

4.4 分页
  • 语法
select * from 表名 limit start,count说明: 1. limit 是分页查询关键字 2. start 表示开始行索引,默认为0 3. count 表示查询条数

  • 举例
1. 查询 表中前3条 数据; select * from 表名 limit 0,3; 也可以这样写 select * from 表名 limit 3;

  • 案例
已知每页显示 m 条数据,求第 n 页显示的数据
分析:需要求每页的开始行索引
select * from 表名 limit (n-1)*m,m;

4.5 分组
  • 语法
select 字段名 from 表名 group by 字段名 having 条件; 说明: 1. group by 是分组查询的关键字 2. having 也是关键字,都是和 group by 一起使用,主要用于筛选,后面也可以是聚合函数

  • 举例
1. 对 学生表 中的 性别字段 进行分组,并统计各组有多少人 select 性别字段名,count(*) from 学生表 group by 性别字段名2. 对 学生表 中的 成绩字段 进行分组,筛选出大于60分的组,并统计各组有多少条数据 select 成绩字段名,count(*) from 学生表 group by 成绩字段名 having 成绩字段名 > 60; 注意: 使用 group by 分组查询关键字后,查询列表建议只出现分组字段和聚合函数

五、聚合函数 5.1 介绍
聚合函数又叫组函数,通常是对表中的数据进行统计结果计算,一般结合分组 (group by) 来使用,用于统计和计算分组数据。
  • 常用的聚合函数
    • count(col):表示求指定 字段 的总条数
    • max(col):表示求指定 字段 的最大值
    • min(col):表示求指定 字段 的最小值
    • sum(col):表示求指定 字段 的和
    • avg(col):表示求指定 字段 的平均值
  • 举例
1. 求 姓名字段 总条数 select count(姓名字段名) from 表名; 2. 求 年龄字段 最大值 select max(年龄字段名) from 表名; 3. 求 年龄字段 最小值 select min(年龄字段名) from 表名; 4. 求 身高字段 的和 select sum(身高字段名) from 表名; 5. 求 身高字段 的平均值 select avg(身高字段名) from 表名; 如果 身高字段 中的值有 null 时,需要这样写 select avg(ifnull(身高字段名,新的值)) from 表名; 说明: > ifnull 函数: 表示判断指定字段的值是否为 null,如果为空使用自己提供的值 > 聚合函数默认忽略字段为 null 的记录,要想 指定字段的值为 null 的记录也参与计算,必须使用 ifull 函数对 null 值做替换。

六、连接查询 连接查询可以实现多个表的查询,当查询的字段数据来自不同的表就可以使用连接查询来完成。
连接查询包括【内连接查询、左连接查询、右连接查询、自连接查询】
6.1 内连接查询
查询两个表中符合条件的共有记录
  • 语法格式
select 字段名 from 表1 inner join 表2 on 表1.字段1 = 表2.字段2; 说明: 1. inner join 就是内连接查询关键字 2. on 就是连接查询条件

  • 举例
使用 内连接 查询学生表与班级表 select * from 学生表 inner join 班级表 on 学生表.字段名 = 班级表.字段名;

6.2 左连接查询
以左表为主,根据条件查询右表中的数据,如果根据条件查询右表的数据不存在时使用 null 填充
  • 语法格式
select 字段名 from 表1 left join 表2 on 表1.字段1 = 表2.字段2说明: 1. left join 就是左连接查询关键字 2. on 就是连接查询条件 3. 表1 是左表 4. 表2 是右表

  • 举例
使用 左连接 查询学生表与班级表 select * from 学生表 left join 班级表 on 学生表.字段名 = 班级表.字段名;

6.3 右连接查询
以右表为主,根据条件查询左表中的数据,如果根据条件查询左表的数据不存在时使用 null 填充
  • 语法格式
select 字段名 from 表1 right join 表2 on 表1.字段1 = 表2.字段2; 说明: 1. right join 就是右连接查询关键字 2. on 就是连接查询条件 3. 表1 是左表 4. 表2 是右表

  • 举例
使用 右连接 查询学生表与班级表 select * from 学生表 right join 班级表 on 学生表.字段名 = 班级表.字段名;

6.4 自连接查询
左表和右表是同一个表,根据连接查询条件查询两个表中的数据
  • 语法格式
select 表1别名.字段名,表2别名.字段名... from 表1 as 表1别名 right join 表2 as 表2别名 on 表1别名.字段1 = 表2别名.字段2; 说明: > 自连接查询必须对表起别名

6.5 子查询
在一个 select 语句中,嵌入了另外一个 select 语句,那么被嵌入的 select 语句称之为子查询语句,外部那个 select 语句则称为主查询。
  • 主查询和子查询的关系
    • 子查询是嵌入到主查询中
    • 子查询是辅助主查询的,要么充当条件,要么充当数据源
    • 子查询是可以独立存在的语句,是一条完整的 select 语句
  • 语法格式
select * from 表名 where 字段名 条件 (select * from 表名);

  • 举例
查询 大于平均年龄 的 学生表 select * from 学生表 where 年龄字段 > (select avg(年龄字段) from 学生表);

能不能续更就看你们啦

    推荐阅读