当前位置:首页 » 《随便一记》 » 正文

【看此篇】初识MySQL—小白真爱❤️❤️❤️_张浔CSDN

19 人参与  2022年02月25日 08:19  分类 : 《随便一记》  评论

点击全文阅读


文章目录(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 数据类型

数据类型是指在创建表的时候为表中字段指定数据类型,只有数据符合类型要求才能存储起来,使用数据类型的原则:够用就行,尽量使用取值范围小的,这样可以节省更多的存储空间。

  • 常用数据类型

    • 整数: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 ~ 1270 ~ 255
SMALLINT(smallint)2-32768 ~ 327670 ~ 65535
MEDIUMINT(mediumint)3-8388608 ~ 83886070 ~ 16777215
INT/INTEGER(int/integer)4-2147483648 ~ 21474836470 ~ 4294967295
BIGINT(bigint)8-9223372036854775808 ~ 92233720368547758070 ~ 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 学生表);

能不能续更就看你们啦 🤣


点击全文阅读


本文链接:http://zhangshiyu.com/post/35310.html

字段  查询  字段名  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1