MySQL数据库(基础篇二)

一、简单查询

1.1 数据的备份还原

  • 导出:先对数据库进行备份,然后提取备份文件中的sql语句
  • 导入:
    • 方法一:创建和原始数据同名的数据,然后执行从备份文件中导出的sql语句【此方法不要修改sql语句】
    • 方法二:在数据库中直接运行导出的sql语句【此方法往往需要先修改数据库文件】

1.2 简单查询

MySQL的查询操作

  • 单表查询:也就是从一个表中找数据,也叫做 简单查询
  • 多表查询:联合多个表查询数据,也叫做 链接查询
1.2.1 查询的格式

select 查询的内容 from 表名 where 条件

where后面的条件的写法

> 大于

>= 大于等于

< 小于

<= 小于等于

<> 不等于

!= 不等于

between...and... 判断范围

is null 是空

is not null 不是空

like 模糊查询

in 判断某个字段是否在给定的集合中

1.2.2 通配符%
  • 表示 任意多个任意字符
  • 可以表示0个、1个或者是多个任意字符

案例:查看students表

1、age大于20

select * from students where age>20

2、age 20-30

select * from students where age between 20 and 30

3、name是空

select * from students name is null

4、name包含q

select * from students where name like "%q%"

5、age 是3 或5 或7

select * from students where age in (3,5,7)

1.2.3 排序查询格式

select 查询内容 from 表名 where 条件 order by 字段名

案例:

1、将所有学生按照年龄排序

select * from students order by age

2、将所有学生按照年龄排序,并且是升序

select * from students order by age asc

3、将所有学生安装年龄排序,并且是降序

select * from students order by age desc

4、显示所有学生信息,按照年龄和班级id排序,升序显示

select * from students order by age,classid asc

1.2.4 指定输出几条记录:
  • 默认输出所有符合条件的记录
  • limit 数字

格式:select 查询内容 from 表名 where 条件 order by 字段名 limit 数字

1.2.5 聚合函数
  • sum() 求和
  • avg() 求平均值
  • max() 求最大值
  • min() 求最小值
  • count() 统计记录条数

案例:

1、计算所有学生的年龄和

select sum(avg) from students

1.2.6 去重:去除重复的字段

关键字:distinct

案例:

1、将年龄小于50的用户,安装年龄排序,并且去除重复的字段

select distinct age from students where age<50 order by age

1.2.7 分组

group by 字段

分组后加条件

having

完整的查询格式

select * from 表名 where 条件 order by 字段 limit 数字 group by 字段 having 条件

二、查询进阶

2.1 链接查询

将两张或者多张表联合起来进行查询,这就是链接查询【join】,链接查询又分为:

  • 交叉链接
    • 表中的每一行,分别和其他表的每一行,组成一个新的行
    • 新表的行数是两个表的行数相乘,列数是两个表的列数相加
  • 自然连接
    • 将多个表中,符合条件进行链接
  • 外连接
    • 左外连接
    • 右外链接
2.2 交叉链接的结果
  • 得到笛卡尔积表
  • 这个表中有大量的无用数据

select * from 表1,表2;

笛卡尔积表,行数是两个表的行数相乘,列数是两个表的列数相加

2.3 自然链接的结果
  • 在交叉链接的基础上,通过加条件,可以得到自然链接

select * from 表1,表2 wheere 表1.字段=表2.字段

2.4 字段别名
  • 给字段取一个新的名字
  • 显示结果中,字段名会直接用新的名字显示出来

select 字段名 as 新名字 from 表名

2.5 表别名

select 字段 from 表名 as 新名

2.6 使用自然链接存在的问题:
  • 会导致数据丢失
  • 解决方法:用左外链接、右外链接
    • 左表:前面的
    • 右表:后面的
2.7 左外链接
  • 显示结果以左表为准
  • 也就是说,左表中的数据会全部出现,右表中的数据,有就显示,没有就显示为空

select * from 左表 left join 右表 on 条件

2.8 右外链接
  • 显示结果以右表为准
  • 右表中的数据会全部出现,左表中的数据,有就显示,没有就显示为空

select * from 左表 right join 右表 on 条件

三、外键约束

外键约束是数据库中用于维护数据完整性的一种重要机制。

作用:

  • 维护两个表之间的关联关系,确保数据的一致性和完整性。

概念:

  • 主键:是用于在一个表中唯一标识一个字段
  • 外键:外键是另外一个表的主键,通过使用外键,可以将两个表关联起来

表与表之间的关系的类型:

  • 一对一
  • 一对多
  • 多对多

案例:

sql 复制代码
# 创建表tb2
create table tb2(
classid int primary key,    # 第一个字段是classid,是主键
name char(30)               # 第二个字段是name
)

# 创建表tb1
create table tb1(
id int primary key,         # 第一个字段是id,是主键
name char(30),              # 第二个字段是name
classid int,                # 第三个字段是classid,是整数
foreign key(classid) references tb2(classid);    # 将classid这个字段转换成外键,指向表tb2的classid这个字段

这个外键约束,可以确保在插入或更新tb1表中的数据时,classid字段的值必须在tb2表的classid字段中存在。这样可以保证数据的一致性和完整性,避免出现无效的外键值。

四、视图

视图:view

  • 视图可以认为是一张表
  • 这个表是存在内存中的虚表,断电就会消失

作用

  • 通过视图,可以让用户只能访问数据库中的一部分数据(给用户授权)

格式

create view 视图名 as select 语句

案例:给用户user3进行授权,让用户只可以访问id小于5的数据

sql 复制代码
# 第一步:创建视图,视图中包含的是id小于5的数据
create view v1 as select * from students where stuid<5;

# 第二步:查看当前系统中的表,会发现多一个叫做v1的表,这个表其实就是视图
show tables;

# 第三步:给用户user3授权,让user3仅仅可以访问视图中的数据
# 授权的格式:grant 权限 on 库名.表名 to 用户名@主机 identified by "密码";
grant all on hellodb.v1 to "user3"@"localhost" identfied by "123";

# 刷新授权表
flush privileges

五、事务

简介:

  • 将多个sql语句,组合成一个整体,这个整体就是一个事务,事务中的所有语句要么都执行,要么都不执行

  • 事务中的语句,如果只有部分执行成功,那么就需要将这个事务进行回滚操作

    • 回滚:将数据恢复到执行操作之前的状态
  • 通过使用事务,可以保证数据的一致性
    事务的操作:

  • 提交事务

  • 回滚事务

提交事务:

  • 让事务中多个语句,真正的生效
  • 如果使用了事务,那么在事务提交之前,其他用户是看不到事务中的操作的

回滚事务:

  • 恢复到执行语句之前的状态

操作的命令格式:

begin 启动事务

commit 提交事务,提交之后,事务自动结束

rollback 回滚事务,回滚之后,事务自动结束

注意:

  • 一般情况下,在MySQL客户端中,每个sql语句,都是一个单独的事务,而且事务会自动提交
  • 但是,在后期的python中,需要手动去提交/回滚事务的

六、扩展命令

6.1 union

作用:将两个sql语句执行结果连接起来一起显示

格式:【sql语句1】 union 【sql语句2】

6.2 concat (拼接)

作用:将两个字段输出到一块

格式:select concat(字段名,字段名) from 表名

6.3 length (返回长度)

作用:返回查询结果长度

格式:select length(字段名) from 表名

6.4 group_concat(拼接字符串)

作用:输出到一行

格式:select group_concat(字段名,拼接的字符) from 表名

相关推荐
做人求其滴2 分钟前
如何多人在同一个局域网下连接Mysql数据库?怎么将 MySQL 数据库共享给他人?保姆级教程idea,Navicat连接
数据库·学习·mysql·intellij-idea·idea
PGCCC21 分钟前
【PGCCC】Postgresql BRIN 索引原理
数据库·postgresql
Ljw...26 分钟前
用户管理(MySQL)
数据库·mysql·用户管理
尘浮生3 小时前
Java项目实战II基于微信小程序的南宁周边乡村游平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·微信小程序·小程序·maven
东阳马生架构7 小时前
MySQL底层概述—1.InnoDB内存结构
java·数据库·mysql
standxy8 小时前
通过轻易云平台实现聚水潭数据高效集成到MySQL的技术方案
android·数据库·mysql
itwangyang5208 小时前
2025 - 科研神器 - 批量处理 PDF、SVG、PNG 和 JPG 文件,将它们转换为彩色 TIFF 文件,并保存到指定的 tiff 文件夹中
数据库·pdf
痞老板A小安装C49 小时前
redis的大key和热key问题解决方案
数据库·redis·bootstrap
feilieren9 小时前
DataGrip 连接 Redis、TongRDS
数据库·redis·缓存
苹果酱05679 小时前
windows安装redis, 修改自启动的redis服务的密码
java·开发语言·spring boot·mysql·中间件