MySQL——基础篇

学习视频链接:https://www.bilibili.com/video/BV1Kr4y1i7ru/?spm_id_from=333.999.0.0&vd_source=619f8ed6df662d99db4b3673d1d3ddcb

前言✴️

基础篇——MySQL概述、SQL、函数、约束、多表查询、事务

进阶篇——存储引擎、索引、SQL优化、视图/存储过程/触发器、锁、InnoDB核心、MySQL管理

运维篇——日志、主从赋值、分库分表、读写分离

一、基础篇

1. MySQL概述🍊

数据库(DataBase, DB):存储数据的仓库,数据在其中是有组织存储的

|

数据库管理系统(DataBase Management System, DBMS):操作和管理数据库的软件

|

SQL(Structured Query Language):操作数据库的语言,一套标准

主流的关系型数据库

在这里插入图片描述

1.1 安装及启动

安装

在这里插入图片描述

启动及停止

在这里插入图片描述

客户端进行连接

  • 开始菜单——MySQL Client
  • 命令行——mysql [-h 127.0.0.1] [-P 3306] -u root -p

数据模型

在这里插入图片描述

数据库分类

  • 关系型数据库(RDBMS):建立在关系模型基础上,是多张相互连接的二维表组成的数据库
  • 非关系型数据库:不是表结构存储的

1.2 SQL🍌

1.2.1 通用语法

注意事项:

  • SQL语句单行或多行书写,以分号结尾
  • SQL语句可以使用空格或缩进来增强语句的可读性,空格和缩进不限个数
  • MySQL数据库的SQL语句不区分大小写,关键字一般大写
  • 注释 --注释内容 #注释内容 /注释内容/

分类:

  • DDL(Data Definition Language, 数据定义语言)——定义/创建数据库对象(数据库,表,字段
  • DML(Data Manipulation Language, 数据操作语言)——增删改表中的数据
  • DQL(Data Query Language, 数据查询语言)——查询数据库中表的记录
  • DCL(Data Control Language, 数据控制语言)——创建数据库用户、控制数据库的访问权限
1.2.2 DDL

1)DDL-数据库操作

-- 查询所有的数据库
SHOW DATABASES;
-- 查询当前数据库
SELECT DATABASE();
# 创建  utf8mb4
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
# 删除
DROP DATABASE [IF EXISTS] 数据库名;
# 使用
USE 数据库名

2)DDL-表查询

-- 查询当前数据库的所有表
SHOW TABLES;
-- 查询表结构
DESC 表名;
-- 查询指定表的建表语句
SHOW CREATE TABLE 表名;

3)DDL-表创建

 create table tb_user(
    -> id int comment '编号',
    -> name varchar(50) comment '姓名',
    -> age int comment '年龄',
    -> gender varchar(1) comment '性别'
    -> )comment '用户表';
  
creat table 表名(
 字段名 字段类型 [comment 字段注释],
 ……
 字段名 字段类型 [comment 字段注释]
)[comment 表注释];

字段类型

数值类型

在这里插入图片描述

字符类型

在这里插入图片描述

日期时间类型

在这里插入图片描述

4)DDL-表操作-修改

# 字段
-- 添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
-- 修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
-- 修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
-- 删除
ALTER TABLE 表名 DROP 字段名;
# 表
-- 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
-- 删除
DROP TABLE [IF EXISTS] 表名;
-- 删除指定表,并重新创建该表,保留表结构
TRUNCATE TABLE 表名;
1.2.3 DML
-- 添加数据 字符串和日期类型要用引号引起来
INSERT
# 给指定字段添加数据
INSERT INTO 表名(字段名1, 字段名2,……) VALUES (值1, 值2, ……);
# 给全部数据添加字段
INSERT INTO 表名 VALUES (值1, 值2, ……);
# 批量添加数据
INSERT INTO 表名(字段名1, 字段名2,……) VALUES (值1, 值2, ……), (值1, 值2, ……), (值1, 值2, ……);
INSERT INTO 表名 VALUES (值1, 值2, ……), (值1, 值2, ……), (值1, 值2, ……);


-- 修改数据;如果不加条件,就会修改整张表的所有数据。
UPDATE
UPDATE 表名 SET 字段名1=值1, 字段名2=值2, … [WHERE 条件];
-- 删除数据
DELETE
DELETE FROM 表名 [where 条件];

DELETE不能删除某个字段的值,可以使用UPDATE,使用UPDATA修改表中数据为NULL

1.2.4 DQL

语法

SELECT
	字段列表
FROM
	表名列表
WHERE
	条件列表
GROUP BY
	分组字段列表
HAVING
	分组后条件列表
ORDER BY
	排序字段列表
LIMIT
	分页参数

DQL-基本查询

# 查询多个字段
SELECT 字段1, 字段2, …… FROM 表名;
SELECT * FROM 表名;  # 效率低,不直观

# 设置别名
SELECT 字段1 [AS 别名1], 字段1 [AS 别名1], …… FROM 表名;

# 去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;

DQL-条件查询

SELECT 字段列表 FROM 表名 WHERE 条件列表;

在这里插入图片描述

聚合函数

  • 概念: 将一列数据作为一个整体,进行纵向计算

  • 常见聚合函数: count——统计数量

    ​ max——最大值

    ​ min——最小值

    ​ avg——平均值

    ​ sum——求和

    注意:所有聚合函数不计算null值

    SELECT 聚合函数(字段列表) FROM 表名;
    

分组查询

SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
/*
where 和 having 的区别
1. 执行时机:where是分组之前进行过滤,不满足where条件,不参与分组;having是分组之后对结果进行过滤
2. 判断条件不同:where不能对聚合函数进行判断,having可以
*/

-- 注意
-- 执行顺序:where > 聚合函数 > having
-- 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无意义

排序查询

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2, ……;
# 排序方式
ASC  升序
DESC  降序
# 第一个字段排序后相等,才会执行第二个字段的排序

分页查询

# 语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
# 起始索引是0开始, 起始索引=(查询页码-1)*每页显示记录数
# 如果查询的是第一页的数据,起始索引可以省略

DQL-执行顺序

在这里插入图片描述

起别名要在执行顺序之后才能使用

1.2.5 DCL

哪些用户可以访问,每个用户有访问数据库的什么权限

DCL-管理用户:SQL开发人员操作少,主要是DBA(Database Administrator 数据库管理员)使用

# 1. 查询用户
USE mysql;
SELECT * FROM user;

# 2. 创建用户  %表示任意主机,localhost表示本机
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

# 3. 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';

# 4. 删除用户
DROP USER '用户名'@'主机名';

DCL-权限控制

在这里插入图片描述

# 1. 查询权限
SHOW GRANTS FOR '用户名'@'主机名';

# 2. 授予权限  所有数据库的表*.*
# 权限之间用逗号分隔
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

# 3. 撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

1.3 函数🥭

概念: 一段可以直接被调用的代码或程序

1.3.1 字符串函数

在这里插入图片描述

1.3.2 数值函数

在这里插入图片描述

1.3.3 日期函数

在这里插入图片描述

select now();  # 2023-12-20 08:57:50
select curtime();  # 08:59:47
select YEAR(now());  # 2023
select MONTH(now());  # 12
select day(now());  #20

select date_add(now(), INTERVAL 70 YEAR);  # 2093-12-20 09:02:30
select date_add(now(), INTERVAL 70 MONTH);  # 2029-10-20 09:02:42
select date_add(now(), INTERVAL 70 DAY);  # 2024-02-28 09:02:53

select datediff('2023-1-10', '2023-1-1');  # 9
1.3.4 流程函数

实现条件筛选,从而提高语句的效率

在这里插入图片描述

create table score
(
    id int comment '编号',
    name varchar(50) comment '姓名',
    math double comment '数学成绩',
    english double comment '英语成绩',
    chinese double comment '语文成绩'
) comment '学员成绩表';

insert into score values (1, 'TOM', 67, 88, 95), (2, 'Rose', 23, 66, 90), (3, 'Jack', 56, 98, 76);

show create table score;
show tables;

select * from score;

select
    id,
    name,
    (case when math >= 85 then '优秀' when math >= 60 then '及格' else '不及格' end) as 'math',
    (case when english >= 85 then '优秀' when english >= 60 then '及格' else '不及格' end) as 'english',
    (case when chinese >= 85 then '优秀' when chinese >= 60 then '及格' else '不及格' end) as 'chinese'
from score;

1.4 约束🍓

概念: 作用于表中字段上的规则,用于限制存储在表中的数据

目的: 保证数据库中数据的正确、有效和完整

时机: 创建表/修改表的时候添加约束

分类: 在这里插入图片描述

自动增长:AUTO_INCREMENT

create table user (
  id int primary key auto_increment comment '主键',
  name varchar(10) not null unique comment '姓名',
  age int check ( age >0 and age <= 120 ) comment '年龄',
  status char(1) default '1' comment '状态',
  gender char(1) comment '性别'
) comment '用户表';

-- 什么情况下会使用那个默认值呢??  不写要插入这个字段
-- 插入数据
insert into user(name, age, status,gender) values ('Tom1', '19', '1', '男'), ('Tom2', '20', '2', '男');
insert into user(name, age,status,gender) values('Tom3','80','1','男');  # 上面语句执行了两次,这条记录的编号是从5开始的
insert into user(name, age,status,gender) values(null,'80','1','男');  # null不占用编号
insert into user(name, age,status,gender) values('Tom4','80','1','男');
# 外键约束
CREATE TABLE 表名(
    字段名 数据类型,
    ……
    [CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名);
);

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名);

在这里插入图片描述

1.5 多表查询🍒

1.5.1 多表关系

一对多(多对一): 在多的一方建立外键,与少的一方的主键连接

多对多: 建立第三张中间表,中间表至少包含两个外键,分别关联两个主键

一对一: 用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,提升操作效率。在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)

1.5.2 多表查询概述

从多张表中查询数据——消除无效的笛卡尔积

需要限定条件where

1.5.3 内连接

查询A、B交集部分数据

# 隐式内连接
SELECT 字段列表 FROM 表1, 表2 WHERE 条件……;

# 显式内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON  连接条件;

-- 显式内连接减少扫描,速度更快

1.5.4 外连接

左外连接:查询左表所有数据,以及两张表交集部分数据

右外连接:查询右表所有数据,以及两张表交集部分数据

# 左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件……;

# 右外连接
SELECT 字段列表 FROM 表1 RIGHT[OUTER] JOIN 表2 ON 条件……;

-- 换一下表的位置就无所谓左外还是右外连接

1.5.5 自连接

当前表与自身的连接查询,自连接必须使用表别名

SELECT 字段列表 FROM 表1 别名1 JOIN 表1 别名2 ON 条件……;

1.5.6 联合查询

把多次查询的结果合并起来,形成一个新的查询结果集

# UNION 去重 UNION ALL 不去重
# 对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致
SELECT 字段列表 FROM 表A……
UNION/UNION ALL 
SELECT 字段列表 FROM 表B……;
/*
* 为什么不用or
  1. 联合查询效率更高,会使索引失效?
  2. 一张表or方便,多张呢?
*/

1.5.7 子查询

概念: SQL语句中嵌套SELECT语句,称为嵌套查询 ,又称子查询

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

根据子查询结果分类

  • 标量子查询(子查询结果是单个值)

    # 子查询返回的结果是单个值(数字、字符串、日期等)
    # 常用操作符
    > >= < <= <> =
    
  • 列子查询(子查询结果为一列)

    # 常用操作符
    IN——在指定的集合范围之内
    NOT IN——不在指定的集合范围之内
    ANY——子查询返回列表中,有任意一个满足即可
    SOME——和ANY同
    ALL——子查询返回列表的所有值都必须满足
    
  • 行子查询(子查询结果为一行)

    # 常用操作
    =
    <>
    IN
    NOT IN
    SELECT * FROM emp WHERE (列1,列2) = (SELECT 列1, 列2 FROM ……)
    
  • 表子查询(子查询结果为多行多列)

    # 常用操作
    IN
    

根据子查询位置

  • WHERE之后
  • FROM之后
  • SELECT之后

1.6 事务🫐

1.6.1 事务简介

一组操作的集合,不可分割,要么同时成功,要么同时失败。——事务会把所有的操作作为一个整体一起向系统提交或撤销操作

默认MySQL的事务是自动提交的,也就是当执行一条DML语句,MySQL会立即隐式地提交事务

1.6.2 事务操作

方式一:修改事务的提交方式

# 查看/设置事务提交方式
SELECT @@autocommit;  # 查看当前事务的提交方式
SET @@autocommit=0;  # 0表示手动提交;1表示自动提交
# 提交事务
COMMIT;
# 回滚事务
ROLLBACK;
# 无论正确执行还是错误执行,提交了之后就不能回滚回去了;只要没提交就能回滚。
# 一般执行没问题就提交,执行出错就回滚。

方式二:手动开启事务

# 开启事务
START TRANSACTION 或 BEGIN;
# 提交事务
COMMIT;
# 回滚事务
ROLLBACK;
-- ---------------------------- 事务操作 ----------------------------
-- 数据准备
create table account(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '姓名',
    money int comment '余额'
) comment '账户表';
insert into account(id, name, money) VALUES (null,'张三',2000),(null,'李四',2000);


-- 恢复数据
update account set money = 2000 where name = '张三' or name = '李四';
#
#
select @@autocommit;
#
set @@autocommit = 0; -- 设置为手动提交

-- 转账操作 (张三给李四转账1000)
-- 1. 查询张三账户余额
select * from account where name = '张三';

-- 2. 将张三账户余额-1000
update account set money = money - 1000 where name = '张三';

...  # 不知道这里为什么加.就会程序出错,希望以后学完回来能补充起来

-- 3. 将李四账户余额+1000
update account set money = money + 1000 where name = '李四';


-- 提交事务
commit;

-- 回滚事务
rollback ;



-- 方式二
-- 转账操作 (张三给李四转账1000)
start transaction ;

-- 1. 查询张三账户余额
select * from account where name = '张三';

-- 2. 将张三账户余额-1000
update account set money = money - 1000 where name = '张三';

程序执行报错 ...

-- 3. 将李四账户余额+1000
update account set money = money + 1000 where name = '李四';


-- 提交事务
commit;

-- 回滚事务
rollback;

1.6.3 事务四大特性

事务的四大特性:

  • 原子性(Atomicity): 事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency): 事务完成时,必须使所有的数据都保持一致状态。
  • 隔离性(Isolation): 数据库系统提供的隔离机制 ,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性(Durability): 事务一旦提交或回滚,它对数据库中数据的改变是永久的。

1.6.4 并发事务问题

问题:

  • 脏读: 一个事务读到另一个事务还没提交的数据
  • 不可重复读: 一个事务先后读取同一条记录,但两次读取的数据不同
  • 幻读: 一个事务按照条件查询数据时,没有对应行,但是插入数据时,又发现这行数据已经存在

1.6.5 事务隔离级别

解决并发事务问题

级别分类:

在这里插入图片描述

# 查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;

# 设置事务隔离级别
SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE};

数据隔离级别越高,数据越安全,性能越低。

总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/260243.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot3通过GraalVM生成exe执行文件

一、安装GraalVM 1、官网&#xff1a;https://www.graalvm.org/downloads/ 2、配置环境变量 2.1、环境变量必须使用JAVA_HOME&#xff0c;否则会出现问题 2.2、在系统变量配置Path,%JAVA_HOME%\bin&#xff0c;注意必须放在顶部第一位 2.3、配置jdk的环境变量&#xff0c;在P…

vue的语法模板与数据绑定的说明

vue的两大模板语法&#xff1a; 1.插值语法 2.指定语法 插值语法&#xff1a;{{}} 功能&#xff1a;用于解析标签体的内容 写法&#xff1a;{{xxx}},xxx是js表达式,且可以直接读取到data中的所有属性 指定语法&#xff1a; 功能:用于解析标签(包括:标签属性、标…

判断数据是否为整数--函数设计与实现

#定义函数&#xff1a;is_num(s),判断输入的数据是否整数。 #(1)判断是否是数字 def is_num(s):if s.isdigit(): #isdigit()是一个字符串方法&#xff0c;用于检查字符串是否只包含数字字符。如果字符串只包含数字字符&#xff0c;则返回True&#xff1b;否则返回Falsereturn T…

订货系统本地化部署的三大优势

批发贸易行业&#xff0c;订货系统的本地化部署成为了许多企业的首选。本地化部署意味着将订货系统部署在企业自己的服务器上&#xff0c;而不是依赖于云服务提供商。这种部署方式有许多优势&#xff0c;以下是其中的四个主要优势&#xff1a; 1. 数据安全性&#xff1a;本地化…

Redis第2讲——Java三种客户端(Jedis、Lettuce和Redisson)

上篇文章介绍了Redis的9种数据类型和常命令、7种数据结构和9种编码方式。但是如果想要把它应用到项目中&#xff0c;我们还需要一个redis的客户端。redis的Java客户端种类还是很多的&#xff0c;其中使用最广泛的有三种——Jedis、lettuce和redisson&#xff0c;下面我们一起来…

基于Redis限流(aop切面+redis实现“令牌桶算法”)

令牌桶算法属于流量控制算法&#xff0c;在一定时间内保证一个键&#xff08;key&#xff09;的访问量不超过某个阈值。这里的关键是设置一个令牌桶&#xff0c;在某个时间段内生成一定数量的令牌&#xff0c;然后每次访问时从桶中获取令牌&#xff0c;如果桶中没有令牌&#x…

I.MX6ULL启动详解:Boot配置、Bootable image启动头的组成

本篇文章来了解一下I.MX6ULL的启动方式&#xff0c;实际上之前我介绍了NXP的跨界MCU RT1170的启动方式&#xff1a;I.MX RT1170启动详解&#xff1a;Boot配置、Bootable image头的组成&#xff0c;两个芯片虽然一个是Cortex-M&#xff0c;一个是Cortex-A&#xff0c;但是都是来…

猫罐头评测:五大平价猫罐头排行榜揭晓!

想必铲屎官都知道给猫咪长期吃主食罐头的好处了吧&#xff01;主食罐头不仅营养丰富&#xff0c;还能让猫咪顺便补充水分。有时候猫咪食欲不佳&#xff0c;一罐主食罐头就能让它们胃口大开呢。 通过本文&#xff0c;我将与大家分享我做宠物医生6年间发现的一些好用的猫罐头&…

AcWing算法提高课-2.1.3山峰和山谷

算法提高课整理 CSDN个人主页&#xff1a;更好的阅读体验 原题链接 题目描述 FGD 小朋友特别喜欢爬山&#xff0c;在爬山的时候他就在研究山峰和山谷。 为了能够对旅程有一个安排&#xff0c;他想知道山峰和山谷的数量。 给定一个地图&#xff0c;为 FGD 想要旅行的区域&a…

20231218在微软官网下载WINDOWS10以及通过rufus-4.3p写入U盘作为安装盘

20231218在微软官网下载WINDOWS10以及通过rufus-4.3p写入U盘作为安装盘 2023/12/18 17:06 百度搜索&#xff1a;下载 windows10 https://www.microsoft.com/zh-cn/software-download/windows10 下载 Windows 10 更新之前&#xff0c;请参阅 Windows 版本信息状态中的已知问题&a…

图神经网络并在 TensorFlow 中实现

asokraju.medium.com 一、说明 本文将引导您了解图神经网络 (GNN) 并使用 TensorFlow 实现该网络。在后续的 文章中&#xff0c;我们讨论 GNN 的不同变体及其实现。这是一个分步计划&#xff1a; 图神经网络 (GNN) 的使用&#xff1a;我们首先讨论 GNN 是什么、它们如何工作以及…

3-10岁孩子语文能力培养里程碑

文章目录 基础能力3岁4岁5岁6-7岁&#xff08;1-2年级&#xff09;8-9岁&#xff08;3-4年级&#xff09;10岁&#xff08;5年级&#xff09; 阅读推荐&父母执行3岁4-5岁6-7岁&#xff08;1-2年级&#xff09;8-9岁&#xff08;3-4年级&#xff09;10岁&#xff08;5年级&a…

1 pandas与NumPy比较

NumPy NumPy是用python进行科学计算的一个基础库&#xff0c;因为它提供python基础包没有提供的数据结构和高性能函数。NumPy定义了一种专门用于科学计算的数据结构ndarray - 它是一种N纬数组。特点如下&#xff1a; 内存块风格 由于ndarray中的所有元素都是相同的&#xff0…

awk 命令详解

1. 编写 awk 脚本基础 1.1 Hello&#xff0c;World 通过演示“Hello&#xff0c;World”这个程序来介绍一种程序设计语言。通过演示这个程序在 awk 中如何工作将证明 awk 是如何的不寻常。实际上&#xff0c;有必要演示几种打印“Hello&#xff0c;World”的不同方法。 在第…

llvm后端之DAG设计

llvm后端之DAG设计 引言1 核心类设计2 类型系统2.1 MVT::SimpleValueType2.2 MVT2.3 EVT 3 节点类型 引言 llvm后端将中端的IR转为有向无环图&#xff0c;即DAG。如下图&#xff1a; 图中黑色箭头为数据依赖&#xff1b;蓝色线和红色线为控制依赖。蓝色表示指令序列化时两个节…

车载V2X方案的选型分享

ACX200T面向 5G车联网C-V2X 应用的安全芯片&#xff0c;满足V2X场景下消息认证的专用安全芯片&#xff0c;该款芯片采用公司自主的 高速硬件加密引擎 &#xff0c;支 持国家标准SM1、SM2、SM3、SM4密码算法&#xff0c;同时支持国际ECDSA、AES、SHA-1密码算法。可实现网联汽车云…

WT588F34B-16S语音芯片:四通道16K采样率混音播放的应用优势

随着科技的不断进步&#xff0c;语音芯片在电子产品中的应用越来越广泛。其中&#xff0c;WT588F34B-16S语音芯片凭借其卓越的性能和创新的功能&#xff0c;引起了市场的广泛关注。特别是其支持四通道16K采样率混音播放的功能&#xff0c;为实际应用带来了显著的优势。本文将深…

H5聊天系统聊天网站源码 群聊源码 无限建群创群

H5聊天系统聊天网站源码 群聊源码 无限建群创群 1.支持自助建群 管理群 修改群资料 2.支持自动登录 登陆成功可自助修改资料 3.后台可查看群组聊天消息记录 4.支持表情 动态表情 图片发布 5.支持消息语音提醒 测试环境&#xff1a;NginxMySQL5.6PHP5.6 1.将压缩包解压到…

解决:Android 报错 Failed to transform exifinterface-1.2.0.jar

一、问题说明 Failed to transform exifinterface-1.2.0.jar (androidx.exifinterface:exifinterface:1.2.0) to match attributes {artifactTypeandroid-classes-jar, org.gradle.categorylibrary, org.gradle.libraryelementsjar, org.gradle.statusrelease, org.gradle.usa…

excel导出,post还是get请求?

1&#xff0c;前提 今天在解决excel导出的bug时&#xff0c;因为导出接口查询参数较多&#xff0c;所以把原来的get请求接口修改为post请求 原代码&#xff1a; 修改后&#xff1a; 2&#xff0c;修改后 postman请求正常&#xff0c;然后让前端对接口进行同步修改&#xff0…