Mysql整理

一、基础概念

1. 索引

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

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

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

2. MySQL 的存储引擎

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

3. 事务

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

4. 事务隔离级别

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

5. 连接池

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

6. 视图

复制代码
多表联合/复杂查询后创建的虚拟的表,表的数据是动态更新的。创建后会一直存在,除非主动删除
  1. 如何优化数据库查询

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

二、数据库操作

1. Database

sql 复制代码
create Database RUNOOB;
show Databases;
use RUNOOB;
-- drop database RUNOOB;

2. Table

创建表:

sql 复制代码
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;

修改表结构

sql 复制代码
-- 增加
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;

删除表

sql 复制代码
DROP TABLE table_name ;

3. Data

数据结构:

insert
sql 复制代码
--所有列都输入
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
sql 复制代码
select * from runoob_tbl;
update
sql 复制代码
-- 注意列名不能带引号
update runoob_tbl set runoob_author='wanghao' where runoob_id = '2';
delete
sql 复制代码
delete from runoob_tbl where runoob_id = '3';

4. UNION/ UNION ALL/ DISTINCT

sql 复制代码
--如果你需要合并多个查询结果,并且不需要去重,可以使用 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

sql 复制代码
select * from runoob_tbl order by runoob_score desc;

select * from runoob_tbl order by runoob_score asc;
  1. group by
sql 复制代码
--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 ;

三、连接

1. inner join ... where

sql 复制代码
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

sql 复制代码
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

sql 复制代码
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;
相关推荐
cui_win16 分钟前
redis 内存使用率高居高不下,如何分析 key占用情况
数据库·redis·junit·rdb
学Java的bb2 小时前
后端Web实战-MySQL数据库
数据库·mysql
Elastic 中国社区官方博客2 小时前
超越相似名称:Elasticsearch semantic text 如何在简洁、高效、集成方面超越 OpenSearch semantic 字段
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
掉头发的王富贵2 小时前
【实战篇】Docker安装MySQL集群
mysql·docker·容器
农民也会写代码3 小时前
dedecms修改描述description限制字数长度的方法
mysql·php·cms·dedecms
头发还在的女程序员3 小时前
ThinkPHP+Mysql 灵活用工小程序-技术深度解析与实践指南
数据库·mysql·小程序
꒰ঌ 安卓开发໒꒱4 小时前
SQL Server安全删除数据并释放空间的技术方案
数据库·安全·oracle
用户848508146904 小时前
SurrealDB 快速上手教程
数据库·后端
kura_tsuki5 小时前
[Oracle数据库] ORACLE的用户维护和权限操作
数据库·oracle