sql笔记
文章平均质量分 71
学习sql笔记
MojitO_o
这个作者很懒,什么都没留下…
展开
-
【SQL】主从复制
如何提升数据库并发能力:在实际工作中,我们常常将与MySQL配合来使用,当有请求时,会首先从缓存中进行查找,如果存在就直接取出。不存在再访问数据库,这样就提升了读取效率,减少后端数据库的访问压力。redis的缓存架构是高并发架构中非常重要的一环。此外,一般应用对数据库而言都是“”,也就说对数据库读取数据的压力比较大,有一个思路就是采用数据库集群的方案,做主从架构、进行读写分离,这样同样可以提升数据库的并发处理能力。但并不是所有的应用都需要对数据库进行主从架构的设置,毕竟设置架构本身是有成本的。原创 2022-12-12 11:59:10 · 1457 阅读 · 1 评论 -
【SQL】MySQL支持的日志
除二进制日志外,其他日志都是文本文件。默认情况下,所有日志创建于MySQL数据目录中。查看日志当前状态,是否开启,文件位置:查看日志:从SHOW VARIABLES LIKE ‘general_log%’; 结果中可以看到通用查询日志的位置。找到并打开,在通用查询日志里面,我们可以清楚地看到,什么时候开启了新的客户端登陆数据库,登录之后做了什么 SQL 操作,针对的是哪个数据表等信息。关闭日志:SET GLOBAL general_log=off;删除日志:如果数据的使用非常频繁,那么通用查询日志会占原创 2022-12-07 16:51:23 · 676 阅读 · 0 评论 -
【SQL】MVCC 多版本并发控制
不加锁的简单select读都是快照读,读的是历史数据。需要加锁的场景,读取的是记录的最新版本,加锁的select、对数据进行增删改都会进行当前读。事务有四个隔离级别,可能存在三种并发问题:MySQL中默认的隔离级别为可重复读,它实际上解决了脏读、不可重复读和幻读,但并不是串行化。trx_id :每次一个事务对某条聚簇索引记录进行改动时,都会把该事务的事务id赋值给trx_id 隐藏列。roll_pointer :每次对某条聚簇索引记录进行改动时,都会把旧的版本写入到undo日志中,然后这个隐藏列就相原创 2022-12-07 11:38:17 · 986 阅读 · 0 评论 -
【SQL】锁机制
锁的不同角度分类从数据操作的类型划分:读锁,写锁读锁:也称为共享锁、英文用S 表示。针对同一份数据,多个事务的读操作可以同时进行而不会互相影响,相互不阻塞的。写锁:也称为排他锁、英文用X 表示。当前写操作没有完成前,它会阻断其他写锁和读锁。这样就能确保在给定的时间里,只有一个事务能执行写入,并防止其他用户读取正在写入的同一资源。读时可以加共享锁也可以加排他锁;写时只能加排他锁;开启共享锁S:开启排他锁X:S锁与S锁相互兼容S锁与X锁不兼容X锁与X锁不兼容可以很好的避免死锁。innodb支持原创 2022-12-05 13:29:35 · 992 阅读 · 0 评论 -
【SQL】redo log | undo log
事务提交后,刚写完缓冲池,数据库宕机了,那么这段数据就是丢失的,无法恢复。bin log用于主从复制,保持数据的一致性,主机写入一条记录,并写入bin log日志,从机再从bin log日志中复制过来。在对表进行插入的过程中,redo log不断进行顺序记录,而bin log不会记录,直到这个事务提交,才一次性写入bin log文件中。redo log是物理日志,记录的是数据页的物理变化,undo log不是redo log的逆过程。,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性。原创 2022-12-02 15:42:47 · 479 阅读 · 0 评论 -
【SQL】数据库事务
innodb默认支持事务事务是一组逻辑操作单元,使数据从一种状态转变到另一种状态。原创 2022-12-01 12:04:03 · 484 阅读 · 0 评论 -
【SQL】其它查询优化策略
采用count(具体字段)来统计数据行数,尽量用二级索引字段而不是主键索引,因为主键是聚簇索引,扫描时会将所有数据加载到内存中,而二级索引中数据少,加载的成本更低。针对的是会扫描全表的 SQL 语句,如果你可以确定结果集只有一条,那么加上LIMIT 1 的时候,当找到一条结果的时候就不会继续扫描了,这样会加快查询速度。只要有可能,在程序中尽量多使用 COMMIT,这样程序的性能得到提高,需求也会因为 COMMIT 所释放的资源而减少。当B表小于A表时,用in,相当于提前给A表划定范围。原创 2022-11-27 13:58:58 · 476 阅读 · 0 评论 -
【SQL】索引条件下推ICP
Index Condition Pushdown(ICP)是MySQL 5.6中新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式。ICP可以减少存储引擎访问基表的次数以及MySQL服务器访问存储引擎的次数。原创 2022-11-27 13:19:45 · 365 阅读 · 0 评论 -
【SQL】查询优化|排序优化|group by优化|分页查询优化|覆盖索引
这是一个常见又头疼的问题,有很庞大的一堆数据,要查看第200万条数据后的10条数据,此时需要MySQL排序前2000010条数据,从中返回第2000000~2000010的记录,其他记录丢弃,查询排序的代价非常大。子查询是 MySQL 的一项重要的功能,可以帮助我们通过一个 SQL 语句实现比较复杂的查询。但是,子查询的执行效率不高。连接查询不需要建立临时表,其速度比子查询要快,如果查询中使用索引的话,性能就会更好。由于覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是个常用的优化手段。原创 2022-11-26 19:36:43 · 1054 阅读 · 0 评论 -
【SQL】索引失效的11种情况
数据库调优的大致方向:sql查询优化技术有很多,大体分为物理查询优化和逻辑查询优化:数据准备:索引失效案例【1】. 全值匹配【2】. 最佳左前缀法则在定义表时,让主键auto_increment,否则,插入一条数据时可能会移动大量数据。如,往 1 5 8 10 15 … 100 中插9,会放在8 10 中间,因为索引默认升序排列。那么10往后的数据都要挪动,页不够时又要放到下一页,每插一条数据都这样挪一次,开销很大我们自定义的主键列id 拥有AUTO_INCREMENT 属性,在插入记录时存原创 2022-11-24 20:21:41 · 6989 阅读 · 1 评论 -
【SQL】之性能分析|慢查询|explain
sql性能分析中常用的一些方法原创 2022-11-23 16:57:03 · 872 阅读 · 1 评论 -
【SQL】索引的创建与设计原则
④ UPDATE、DELETE 的 WHERE 条件列。③ 经常group by和order by的列。⑤ DISTINCT 字段需要创建索引。② 频繁作为where查询条件的字段。① 字段的数值有唯一性的限制。原创 2022-11-19 20:23:40 · 484 阅读 · 0 评论 -
【SQL】之索引
索引是帮助mysql高效获取数据的数据结构。原创 2022-11-18 14:23:13 · 427 阅读 · 0 评论 -
【MySQL】存储引擎
innodb与myisam并非替代关系,各自有利弊。原创 2022-10-08 13:38:45 · 565 阅读 · 0 评论 -
【MySQL】逻辑架构
MySQL是c/s架构,服务器端程序使用mysqld,客户端发送请求到服务器,服务器处理请求,在物理磁盘上的文件中找到数据,再返回给客户端。MySQL 中的查询缓存,不是缓存查询计划,而是查询对应的结果。硬解析:没有找到SQL语句和执行计划,则创建解析树进行解析,生成执行计划,进入优化器。Oracle 通过检查共享池是否存在 SQL 语句的执行计划,来判断进行软解析,还是硬解析。数据缓冲池是把部分预查询的数据提前放入内存中,用到时可以直接在内存中访问,无需从磁盘中加载。优先对使用频次高的热数据进行加载。原创 2022-10-08 12:21:24 · 359 阅读 · 0 评论 -
【SQL】之触发器
【SQL】之触发器CREATE TRIGGER 触发器名称{BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名FOR EACH ROW触发器执行的语句块;-- 触发器#准备工作CREATE DATABASE dbtest;USE dbtest;CREATE TABLE test_trigger (id INT PRIMARY KEY AUTO_INCREMENT,t_note VARCHAR(30));CREATE TABLE test_trig原创 2022-04-25 18:20:52 · 681 阅读 · 0 评论 -
【SQL】之变量,流程控制与游标
【SQL】之变量,流程控制与游标一、变量系统变量查看系统变量修改系统变量用户变量会话用户变量局部变量二、定义条件与处理程序定义条件定义处理程序三、流程控制if···elseif···else···end if一、变量系统变量系统变量分为全局系统变量(需要添加global 关键字)以及会话系统变量(需要添加 session 关键字),有时也把全局系统变量简称为全局变量,有时也把会话系统变量称为local变量。如果不写,默认会话级别。静态变量(在 MySQL 服务实例运行期间它们的值不能使用 set 动态原创 2022-04-25 11:30:42 · 1342 阅读 · 1 评论 -
【SQL】之存储过程与函数
【SQL】之存储过程与函数存储过程类型1:无参数无返回值类型2:带out类型3:带in类型4:带in和out类型5:带inout存储函数存储过程和存储函数对比存储过程和函数的查看,修改,删除存储过程的英文是 Stored Procedure 。它的思想很简单,就是一组经过预先编译的 SQL 语句的封装。执行过程:存储过程预先存储在 MySQL 服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令,服务器端就可以把预先存储好的这一系列 SQL 语句全部执行。和视图、函数的对比:它和视原创 2022-04-23 22:26:50 · 1316 阅读 · 0 评论 -
【SQL】之视图
【SQL】之视图视图创建视图查看视图更新与删除视图视图可以看作是一个虚拟表,本身不存储数据。本质可看作是存储起来的select语句。视图中select语句中涉及到的表,称为基表。针对视图做dml操作,会影响到对应的基表中的数据,反之亦然。视图本身的删除,不会导致基表中数据的删除。针对小型项目,不推荐使用视图。针对大型项目,可以考虑使用视图。视图优点:可以简化查询;控制数据的访问权限创建视图-- 创建视图CREATE DATABASE dbtest1;USE dbtest1;CRE原创 2022-04-22 21:05:22 · 886 阅读 · 0 评论 -
【SQL】之约束
【SQL】之约束约束分类一、非空约束 NOT NULLcreate table 时添加约束alter table 时添加/删除约束二、唯一性约束 UNIQUEcreate table时添加约束alter table时添加约束复合的唯一性约束删除唯一性约束三、主键约束 PRIMARY KEYcreate table时添加约束复合主键约束alter table时添加/删除约束自增列 AUTO_INCREMENTcreate table时添加alter table时添加mysql8.0新特性:自增变量的持久化四、原创 2022-04-22 19:47:22 · 2564 阅读 · 0 评论 -
【SQL】之数据类型
【SQL】之数据类型数据类型整数类型浮点类型定点数类型浮点数 vs 定点数位类型日期与时间类型TIMESTAMP和DATETIME的区别:文本字符串类型哪些情况使用 CHAR 或 VARCHAR 更好enum类型set类型二进制字符串类型TEXT和BLOB的使用注意事项:json类型选择建议字符串的选择:数据类型整数类型TINYINT :一般用于枚举数据,比如系统设定取值范围很小且固定的场景。SMALLINT :可以用于较小范围的统计数据,比如统计工厂的固定资产库存数量等。MEDIUMINT :用原创 2022-04-21 12:50:03 · 1069 阅读 · 0 评论 -
【SQL】之数据增删改 | 计算列
【SQL】之数据增删改插入数据 insert into ... values ( ... )更新数据 update ... set ... where ...删除数据 delete from ... where ...mysql8.0新特性:计算列插入数据 insert into … values ( … )SELECT *FROM emp1;-- 插入数据#方式1:INSERT INTO emp1VALUES (1,'Tom','2000-12-21',3400); #未指明要添加的字段,按原创 2022-04-19 17:25:00 · 939 阅读 · 0 评论 -
【SQL】之数据库的创建、修改、删除
【SQL】之数据库的创建、修改、删除数据库|表 的创建和管理数据库|表 的创建和管理-- 创建和管理表#创建数据库CREATE DATABASE IF NOT EXISTS mytest1 CHARACTER SET 'gbk';#管理数据库SHOW DATABASES; #查看当前连接中的数据库USE mytest1; #切换数据库SHOW TABLES; #查看当前数据库中保存的数据表SELECT DATABASE() FROM DUAL; #查看当前使用的数据库SH原创 2022-04-18 14:00:08 · 584 阅读 · 0 评论 -
【sql】之子查询:单行子查询 | 多行子查询
【sql】之子查询:单行子查询引入引入-- 子查询#谁的工资比abel高?#方式1:SELECT last_name,salaryFROM employeesWHERE last_name='abel';SELECT last_name,salaryFROM employeesWHERE salary>11000;#方式2:自连接SELECT e2.last_name,e2.salaryFROM employees e1,employees e2WHERE e2.`s原创 2022-04-16 21:02:01 · 933 阅读 · 0 评论 -
【sql】之函数:聚合函数 | sql底层执行原理
【sql】之函数:聚合函数 | sql底层执行原理聚合函数sql底层执行原理执行过程练习聚合函数-- 聚合函数# 1.常见的聚合函数SELECT AVG(salary),SUM(salary)FROM employees;SELECT MAX(salary),MIN(salary),MAX(last_name),MIN(last_name)FROM employees; #适用于数值类型、字符串、时间和日期类型的字段#count:计算指定字段在查询结果中出现的个数SELECT CO原创 2022-04-15 22:04:32 · 238 阅读 · 0 评论 -
【SQL】之函数:单行函数
单行函数-- 单行函数#四舍五入SELECT ROUND(123.756),ROUND(123.456,0),ROUND(123.456,2),ROUND(123.456,-1),ROUND(123.456,-2)FROM DUAL;#连接字符串SELECT CONCAT(e.last_name,' worked for ',m.last_name) "details"FROM employees e JOIN employees mON e.`manager_id`=m.`employ原创 2022-04-14 20:38:33 · 297 阅读 · 0 评论 -
【SQL】之select-多表查询:7种join | sql99语法新特性
多表查询-- 多表查询SELECT employee_id,department_nameFROM employees,departments#1.两个表的连接条件WHERE employees.`department_id`=departments.`department_id`;#2.如果查询语句中出现了多个表中都存在的字段,则必须指明此字段所在的表:SELECT employees.employee_id,departments.department_name,employees.d原创 2022-04-13 14:06:26 · 2319 阅读 · 0 评论 -
【SQL】之select:运算符/排序/分页
1.select-- 1.给列表起别名的三种方式,必须使用“”SELECT employee_id emp_id,last_name AS lname,salary "薪水",salary*12 "annual sal" FROM employees;-- 2.去除重复行 distinctSELECT DISTINCT department_id FROM employees;-- 3.null空值参与运算,结果也为空SELECT employee_id,salary "月工资",sal原创 2022-04-12 20:04:35 · 898 阅读 · 0 评论