Mysql整理

一、基础概念

1. 索引

之前的文章已经写过了,比较细

数据库索引含义,类别,用法,创建方式_表结构加树形id和索引是为什么_马丁•路德•王的博客-CSDN博客

简单概括就是在表的某个列或者多个列或者联合表的时候加个索引,类似图书馆书本的索引编号,查询的时候直接按照索引查询,不用遍历,提高查询效率

2. MySQL 的存储引擎

1. InnoDB 支持事务,外键等
2. Memory 存储引擎将数据存储在内存中,适用于高速读写需求
3. MyISAM 适用于读多写少的场景

3. 事务

事务四元素
1. 原子性:一个事件是个事务(例如下单完成之后扣库存,收账)。要么全部成功,要么全部失败回滚
2. 一致性:事务执行前和结束满足预定义的规则,例如所有的约束和完整性规则必须被满足。
一致性确保了数据库的有效状态转换。
3. 隔离性:事务的执行过程互不影响
3. 永久性:事务执行结束后的影响存储在数据库,永久有效

4. 事务隔离级别

1. 读未提交:只能读取未提交的数据,可能会读取到脏数据,因为读取的时候其他人会编辑
2. 读已提交:只能读取已经提交的数据,不能读取到提交之前的数据
3. 可重复读:可以重复读取数据,还是会有脏读的case
4. 串行化(读写都隔离):读写分开,同步化innodb默认使用[可重复读]

5. 连接池

1. mysql连接池是在程序启动的时候就建立一定的连接数量,当需要使用的时候可以直接用,
而不是每次建立,取消建立的过程,浪费资源
2. 控制连接数可以防止数据库服务器过载,同时提高连接的效率。

6. 视图

多表联合/复杂查询后创建的虚拟的表,表的数据是动态更新的。创建后会一直存在,除非主动删除

7. 如何优化数据库查询

1. 使用索引
2. 分页查询
3. 避免全表扫描
4. 避免使用 SELECT *,多使用连接

8. mysql发生死锁之后怎么处理

innodb_lock_wait_timeout  超时等待时间,默认是50
事务会一直等待,直到结束。
如果发生死锁,会回滚事务,让出资源执行其他操作

9. innodb 存储引擎对应的算法锁

1. Record Lock  -(行锁),事务读取了某一行的记录,不允许其他事务修改,但可以读取
2. Gap Lock -(间隙锁),锁定某数据的间隙,不包括记录本身
3. Next-Key Lock -(间隙锁+行锁) 锁定一个范围间隙+记录本身
添加行锁的方式->使用for update:
但是t这个字段必须已添加索引
select * from tbl where t=1 for update

10. 表的优化策略

1. 读写分离:主库负责写数据,从库负责读数据
2. 垂直分区:根据数据属性,对表分离
3. 水平分区:根据数据位置,水平拆分,表的结构不变

二、数据库操作

1. Database

create Database RUNOOB;
show Databases;
use RUNOOB;
-- drop database RUNOOB;

2. Table

创建表:

CREATE TABLE IF NOT EXISTS `runoob_tbl`(`runoob_id` INT UNSIGNED AUTO_INCREMENT,`runoob_title` VARCHAR(100) NOT NULL,`runoob_author` VARCHAR(40) NOT NULL,`submission_date` DATE,PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

修改表结构

-- 增加
alter table `runoob_tbl`
add runoob_score DECIMAL(10, 2);-- 修改
alter table `runoob_tbl`
modify runoob_score DECIMAL(10, 2) default 0;-- 删除
alter table `runoob_tbl`
drop runoob_score;

删除表

DROP TABLE table_name ;

3. Data

数据结构:

insert
--所有列都输入
insert into runoob_tbl  value(1,'数学', 'wanh', sysdate(),20);--只输入可以为空的字段
insert into runoob_tbl (`runoob_title`,`runoob_author`,`submission_date`) values ('语文','wanghao','2023-08-11');
select
select * from runoob_tbl;
update
-- 注意列名不能带引号
update runoob_tbl set runoob_author='wanghao' where runoob_id = '2';
delete
delete from runoob_tbl where runoob_id = '3';

4. UNION/ UNION ALL/ DISTINCT

--如果你需要合并多个查询结果,并且不需要去重,可以使用 UNION ALL。
--如果你需要合并多个查询结果,并且需要去重,可以使用 UNION。
--如果你在单个查询中希望去重,可以使用 DISTINCT。select `runoob_title`,`runoob_author` from runoob_tbl
UNION 
select `runoob_title`,`runoob_author` from runoob_tbl1;select distinct `runoob_title` from runoob_tbl;select `runoob_title`,`runoob_author` from runoob_tbl
UNION ALL
select `runoob_title`,`runoob_author` from runoob_tbl1;

5. order by

select * from runoob_tbl order by runoob_score desc;select * from runoob_tbl order by runoob_score asc;

6. group by 

--GROUP BY 语句根据一个或多个列对结果集进行分组。--在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。select name,count(*) from employee_tbl group by name;select name,sum(signin) from employee_tbl group by name WITH ROLLUP ;

7. or

使用or会使查询放弃索引,使用全表查询。

select * from stu_tbl where num =10 or num=20;--优化为
select * from stu_tbl where num =10
union
select * from stu_tbl where num =20;

8. limit

select * from tcount_tbl ;
select * from tcount_tbl limit 10;
select * from tcount_tbl order by runoob_count desc limit 10;
-- 分页:从第6个数据开始查询10条
select * from tcount_tbl order by runoob_count asc limit 10 offset 5;

三、连接

 

 1. inner join ... where 

select a.runoob_author,a.runoob_count,b.runoob_title 
from tcount_tbl a inner join runoob_tbl b 
where a.runoob_author = b.runoob_author;

 2. left join ... on

select a.runoob_author,a.runoob_count,b.runoob_title 
from tcount_tbl a left join runoob_tbl b 
on a.runoob_author = b.runoob_author;

3. right join ... on

select a.runoob_author,a.runoob_count,b.runoob_title 
from tcount_tbl a right join runoob_tbl b 
on a.runoob_author = b.runoob_author;

四、一些优化及常见问题

1. 优化查询

1. 避免使用or,因为会全局查询,可以使用in或者union
2. 使用索引
3. 避免使用select *
4. 将表分区,然后查询
5. 使用explain查看sql优化
6. 分页查询
7. 使用join代替where
8. 不要用not,不会走索引;例如:not in, not exist, is not null

2. 常见查询面试题

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Javascript 正则

基本语法 定义 JavaScript种正则表达式有两种定义方式 构造函数 var regnew RegExp(<%[^%>]%>,g);字面量 var reg/<%[^%>]%>/g;g&#xff1a; global&#xff0c;全文搜索&#xff0c;默认搜索到第一个结果接停止i&#xff1a;ingore case&#xff0c;忽略…

刘汉清:从生活到画布,宠物成为灵感源泉

出生于中国镇江的艺术家刘汉清&#xff0c;其作品展现出他对日常生活的深入洞察力&#xff0c;以及对美的独特理解。他的作品通常没有视觉参考&#xff0c;而是通过对他周围环境的理解&#xff0c;尤其是他的宠物&#xff0c;来进行创作。 在刘汉清的创作过程中&#xff0c;他…

VS + Qt Include宏指向的路径错误或者project特性的值无效

如果你电脑上有多个Qt版本&#xff0c;不同项目又依赖不同的Qt版本&#xff0c;就会偶尔出现Qt Include宏指向的Qt路径并不是当前依赖的Qt路径。有时候还会出现project特性的值无效&#xff0c;路径中含有非法字符错误&#xff0c;如下图所示 这个问题的解决办法就是删除工程目…

【C# Programming】C#第一课(自己学习的笔记)

目录 一、C# 介绍 1.1 托管代码(Manage Code ) &#xff1a; 1.2 基础类型库 (Base Class Library)&#xff1a; 1.3 程序集(Assembly)&#xff1a; 1.4 .NET 框架&#xff1a; 1.5 公共中间语言(Common Intermediate Language)&#xff0c;简称 IL。 1.6 C#编译器将源代…

架构实践方法

一、识别复杂度 将主要的复杂度问题列出来&#xff0c;然后根据业务、技术、团队等综合情况进行排序&#xff0c;优先解决当前面临的最主要的复杂度问题。对于按照复杂度优先级解决的方式&#xff0c;存在一个普遍的担忧&#xff1a;如果按照优先级来解决复杂度&#xff0c;可…

80. 删除有序数组中的重复项 II

题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 解题思路&#xff1a;因为数组有序&#xff0c;相等的元素一定相邻&#xff0c;所以可以使用一个变量num统计相等元素的个数&#xff0c;如果当前元素和前一个元素相等&#xff0c…

Linux系统上多文件C程序的编译与调试

一、先建立一个头文件add.h 通过vi创建一个add.h&#xff0c;并进行编写该文件&#xff0c;用来存放求和函数add()的声明&#xff1a; 二、建立一个add.c文件 通过vi创建一个add.c文件&#xff0c;并进行编写&#xff0c;用来存放求和函数add()的实现&#xff1a; 三、建立一…

【Github】SourceTree技巧汇总

sourceTree登录github账户 会跳转到浏览器端 按照Git Flow 初始化仓库分支 克隆远程仓库到本地 推送变更到远程仓库 合并分支 可以看到目前的本地分支&#xff08;main、iOS_JS&#xff09;和远程分支&#xff08;origin/main、origin/HEAD、origin/iOS_JS&#xff09;目前所处…

Vue.js2+Cesium1.103.0 七、Primitive 绘制航线元素

Vue.js2Cesium1.103.0 七、Primitive 绘制航线元素 用 Primitive 绘制航线元素&#xff0c;包括航点图标&#xff0c;航线线段&#xff0c;线段距离标注&#xff0c;航点序号&#xff0c;海拔标注&#xff0c;总航程等信息。 可同时绘制多条航线&#xff1b;可根据 id 清除指…

如何在CSS中水平居中一个元素?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 margin: 0 auto⭐ 使用 Flexbox 布局⭐ 使用绝对定位和负边距⭐ 使用表格布局⭐ 使用网格布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅…

pytest-xdist分布式测试原理浅析

目录 pytest-xdist执行流程&#xff1a; pytest-xdist 模块结构&#xff1a; pytest-xdist分布式测试原理&#xff1a; pytest-xdist源码浅读&#xff1a; pytest-xdist执行流程&#xff1a; 解析命令行参数&#xff1a;pytest-xdist 会解析命令行参数&#xff0c;获取用户…

今天我花了一个通宵的时间安装Windows11系统居然失败,忍不住哭了!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…