数据库 | SQL
数据库笔记
大虎牙
一物不知 深以为耻 便求知若渴
展开
-
学习笔记 | 面对海量数据,为什么无法设计出完美的分布式缓存体系?
随着互联网的发展,分布式系统变得越来越重要,当前的大中型互联网系统几乎都向着分布式方向发展。分布式系统简单说就是一个软硬件分布在不同机房、不同区域的网络计算机上,彼此之间仅仅通过消息传递进行通信及协调的系统。分布式系统需要利用分布的服务,在确保数据一致的基础上,对外提供稳定的服务。CAP 定理的诞生在分布式系统的发展中,影响最大最广泛的莫过于 CAP 理论了,可以说 CAP 理论是分布式系统发展的理论基石。早在 1998 年,加州大学的计算机科学家 Eric Brewer ,就提出分布式系统的三个.原创 2020-09-15 17:28:53 · 386 阅读 · 0 评论 -
学习笔记 | 分布式锁
一、锁使用场景对公共区域数据并发访问,为防止数据脏读,脏写而使用锁。下面举例如下:从redis中取数据,做一定处理,再将处理后的数据压入,当多线程或多进程对同一个key对应的数据做处理时,就可能由于并发导最后的结果不是预期想要的。二、锁的使用流程锁的大体使用流程都是获取锁,做数据处理,然后释放锁,流程图如下:...原创 2020-09-15 16:04:30 · 153 阅读 · 0 评论 -
学习笔记 | 互斥锁和自旋锁
互斥锁(mutexlock):最常使用于线程同步的锁;标记用来保证在任一时刻,只能有一个线程访问该对象,同一线程多次加锁操作会造成死锁;临界区和互斥量都可用来实现此锁,通常情况下锁操作失败会将该线程睡眠,等待锁释放时被唤醒。在多任务操作系统中,同时运行的多个任务可能都需要使用同一种资源。互斥锁是一种简单的加锁的方法来控制对共享资源的访问,互斥锁只有两种状态,即上锁( lock )和解锁( unlock )。原子性:把一个互斥量锁定为一个原子操作,这意味着操作系统(或pthread函数库原创 2020-09-07 19:46:05 · 249 阅读 · 0 评论 -
学习笔记 | Mysql索引查询失效的情况
Mysql索引查询失效的情况首先,复习一下索引的创建:普通的索引的创建:CREATE INDEX (自定义)索引名 ON 数据表(字段);复合索引的创建:CREATE INDEX (自定义)索引名 ON 数据表(字段,字段,。。。);删除索引:DROP INDEX 索引名;以下通过explain显示出mysql执行的字段内容:id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符.select_type: SELECT 查询的类型.原创 2020-09-03 17:24:27 · 333 阅读 · 0 评论 -
学习笔记 | redo和undo的区别
redo和undo区别讨论名词:两种流程,redo重做流程,undo撤销还原流程;或者是redo日志与undo段的简称。动词:redo即重做,undo即撤销还原。翻译有时候为了简单,常把动词和名称混用。不同场景不同的使用。1. redo记录了什么:redo即redo日志,记录数据库变化的日志(区别我们常见的简单的文本日志,redo日志里面记录的都是数据啊,表数据啊等等压缩处理,但也很大)。只要你修改了数据块那么就会记录redo信息,当然nologging除外了。修改的数据块包括:表所在原创 2020-08-28 19:02:22 · 17189 阅读 · 0 评论 -
学习笔记 | 查找成绩排名第二的学生
查找成绩排名第二的学生假设有这样的一张表student:name mark---------------Alice 98Bob 67Eric 75Kato 84首先找到排名第一的学生: SELECT name, MAX(mark) as mark FROM student 有了最高成绩了,那么次高成绩也就很容易搞定了,也就是把所有小于最高成绩的全部拿出来,然后再在这个范围内找出最高成绩,那就是次高成绩:SELECT name, MAX(mark原创 2020-08-28 13:39:35 · 1731 阅读 · 0 评论 -
学习笔记 | SQL注入
SQL注入SQL注入就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。01 SQL注入攻击的总体思路寻找到SQL注入的位置。判断服务器类型和后台数据库类型。针对不同的服务器和数据库特点进行SQL注入攻击。02 应对方法使用正则表达式过滤传入的参数。参数绑定。使用预编译手段,绑定参数是最好的防SQL注入的方法。...原创 2020-08-22 11:37:08 · 114 阅读 · 0 评论 -
学习笔记 | 事务隔离性的实现——常见的并发控制技术MVCC
2.3 事务隔离性的实现——常见的并发控制技术并发控制技术是实现事务隔离性以及不同隔离级别的关键,实现方式有很多,按照其对可能冲突的操作采取的不同策略可以分为乐观并发控制和悲观并发控制两大类。乐观并发控制:对于并发执行可能冲突的操作,假定其不会真的冲突,允许并发执行,直到真正发生冲突时才去解决冲突,比如让事务回滚。悲观并发控制:对于并发执行可能冲突的操作,假定其必定发生冲突,通过让事务等待(锁) 或者**中止(时间戳排序)**的方式使并行的操作串行执行。2.3.1 基于封锁的并发控制核心思想.原创 2020-07-23 22:38:00 · 641 阅读 · 0 评论 -
学习笔记 | MongoDB 数据库 概述
MongoDB 事务MongoDB 在 4.0 之前是不支持事务的,不支持的原因也很简单,因为文档型数据库和传统的关系型数据库不一样,不需要满足三范式。文档型数据库之所以性能比较高的另一个主要原因,就是使用文档型数据库不用进行多表关联性查询,因为文档型数据库会把相关的信息存放到一张表中。因此,无需关联多表查询的 MongoDB,在这种情况下的查询性能是比较高的。把所有相关的数据都放入一个表中,这也是 MongoDB 之前很长一段时间内不支持事务的原因,它可以保证单表操作的原子性,一条记录要么成功插入,原创 2020-07-05 21:48:51 · 157 阅读 · 0 评论 -
学习笔记 | 关系型数据库VS非关系型数据库 VS 文档型数据库
关系数据库(Relational Database) 是建立在关系模型基础上的数据库,借助于几何代数等数学概念和方法来处理数据库中的数据。所谓关系模型是一对一、一对多或者多对多等关系,常见的关系型数据库有 Oracle、SQL Server、DB2、MySQL 等。关系型数据库属于早期的传统型数据库,它有着标准化的数据模型,以及事务和持久化的支持。而文档型数据库是一种非关系型数据库,非关系型数据库(Not Only SQL,NoSQL)正好与关系型数据库相反,它不是建立在“关系模型”上的数据库。文档型.原创 2020-07-05 21:48:00 · 336 阅读 · 0 评论 -
学习笔记 | Memcache
01 Memcache,简称为 MC。MC 的特点:MC 处理请求时使用多线程异步 IO 的方式,可以合理利用 CPU 多核的优势,性能非常优秀;MC 功能简单,使用内存存储数据,只支持 K-V 结构,不提供持久化和主从同步功能;MC 的内存结构以及钙化问题后面会详细介绍;MC 对缓存的数据可以设置失效期,过期后的数据会被清除;失效的策略采用延迟失效,就是当再次使用数据时检查是否失效;当容量存满时,会对缓存中的数据进行剔除,剔除时除了会对过期 key 进行清理,还会按 LRU 策略对数据进行原创 2020-07-05 20:59:23 · 270 阅读 · 0 评论 -
学习笔记 | MySQL8.0 的新特性
了解 MySQL8.0 的一些新特性:默认字符集格式改为了 UTF-8;增加了隐藏索引的功能,隐藏后的索引不会被查询优化器使用,可以使用这个特性用于性能调试;支持了通用表表达式,使复杂查询中的嵌入表语句更加清晰;新增了窗口函数的概念,可以用来实现新的查询方式。其中,窗口函数与 SUM、COUNT 等集合函数类似,但不会将多行查询结果合并,而是将结果放在多行中,即窗口函数不需要 GROUP BY。...原创 2020-07-05 20:42:40 · 159 阅读 · 0 评论 -
学习笔记 | 7大缓存经典问题
7大缓存经典问题01 缓存失效问题描述服务系统查数据,首先会查缓存,如果缓存数据不存在,就进一步查 DB,最后查到数据后回种到缓存并返回。缓存的性能比 DB 高 50~100 倍以上,所以我们希望数据查询尽可能命中缓存,这样系统负荷最小,性能最佳。缓存里的数据存储基本上都是以 key 为索引进行存储和获取的。业务访问时,如果大量的 key 同时过期,很多缓存数据访问都会 miss,进而穿透到 DB,DB 的压力就会明显上升,由于 DB 的性能较差,只在缓存的 1%~2% 以下,这样请求的慢查率会原创 2020-07-04 17:12:42 · 283 阅读 · 0 评论 -
学习笔记 | 大数据和空间限制 | 布隆过滤器 BloomFilter
初识布隆过滤器【题目】不安全网页的黑名单包含100亿个黑名单网页,每个网页的URL最多占用64B。现在想要实现一个网页过滤系统,利用该系统可以根据网页的URL判断该网页是否在黑名单上,请设计该系统。【要求】该系统允许有万分之一以下的判断失误率。使用的额外空间不要超过30GB。首先介绍哈希函数(散列函数)的概念。哈希函数的输入域可以是非常大的范围,比如,任意一个字符串,但是输出域...原创 2020-04-08 11:10:35 · 278 阅读 · 0 评论 -
学习笔记 | 缓存的原理、引入和设计
01 缓存的定义缓存最初的含义,是指用于加速 CPU 数据交换的 RAM,即随机存取存储器,通常这种存储器使用更昂贵但快速的静态 RAM(SRAM)技术,用以对 DRAM进 行加速。这是一个狭义缓存的定义。而广义缓存的定义则更宽泛,任何可以用于数据高速交换的存储介质都是缓存,可以是硬件也可以是软件。缓存存在的意义就是通过开辟一个新的数据交换缓冲区,来解决原始数据获取代价太大的问题,让数据得到更快的访问。02 缓存的基本思想缓存构建的基本思想是利用时间局限性原理,通过空间换时间来达到加速..原创 2020-07-04 15:04:26 · 932 阅读 · 1 评论 -
学习笔记 | 慢查询
慢查询MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”。启动慢查询慢查询日志慢查询配置原创 2020-07-02 12:35:37 · 76 阅读 · 0 评论 -
学习笔记 | 用变量进行成绩排名
用变量进行成绩排名原创 2020-07-02 11:25:38 · 295 阅读 · 0 评论 -
学习笔记 | MySQL 完整性约束
01 完整性约束列的类型、大小之类的约束原创 2020-07-01 23:36:25 · 134 阅读 · 0 评论 -
学习笔记 | Redis 原理、协议和使用
● 请你回答一下mongodb和redis的区别内存管理机制上:Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。MongoDB 数据存在内存,由 linux系统 mmap 实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。支持的数据结构上:Redis 支持的数据结构丰富,包括hash、set、list等。MongoDB 数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。● 请你来说一说Redis的原创 2020-06-28 12:01:34 · 128 阅读 · 0 评论 -
学习笔记 | MySQL 的优化方案有哪些?调优
性能优化(Optimize) 指的是在保证系统正确性的前提下,能够更快速响应请求的一种手段。而且有些性能问题,比如慢查询等,如果积累到一定的程度或者是遇到急速上升的并发请求之后,会导致严重的后果,轻则造成服务繁忙,重则导致应用不可用。它对我们来说就像一颗即将被引爆的定时炸弹一样,时刻威胁着我们。因此在上线项目之前需要严格的把关,以确保 MySQL 能够以最优的状态进行运行。MySQL 的优化方案有哪些?典型回答为了提高 MySQL 数据库的运行效率,MySQL 数据库常见的优化手段分为三个层面:S.原创 2020-06-24 10:14:34 · 286 阅读 · 0 评论 -
学习笔记 | MySQL的exists 查找未分配具体部门的员工的所有信息
使用含有关键字exists查找未分配具体部门的员工的所有信息。本题可以用EXISTS和IN两种方法:/* 1. EXISTS */SELECT *FROM employeesWHERE NOT EXISTS (SELECT emp_no FROM dept_emp WHERE employees.emp_no = dept_emp.emp_no);/* 2. IN */SELECT *FROM employeesWHER原创 2020-06-18 12:31:28 · 2844 阅读 · 0 评论 -
学习笔记 | MySQL 使用原则和设计规范
01 MySQL 使用原则和设计规范讲完范式,接下来我们看看 MySQL 使用中的一些使用原则和设计规范。MySQL 虽然具有很多特性并提供了很多功能,但是有些特性会严重影响它的性能,比如,在数据库里进行计算,写大事务、大 SQL、存储大字段等。想要发挥 MySQL 的最佳性能,需要遵循 3 个基本使用原则。首先是需要让 MySQL 回归存储的基本职能:MySQL 数据库只用于数据的存储,不进行数据的复杂计算,不承载业务逻辑,确保存储和计算分离;其次是查询数据时,尽量单表查询,减少跨库查询和原创 2020-06-18 11:48:14 · 155 阅读 · 0 评论 -
学习笔记 | MySQL 体系结构与存储引擎
课程内容MySQL 数据库的体系结构MySQL 支持的存储引擎InnoDB 能够取代 MyISAM 的原因和 InnoDB 几大核心特性InnoDB 存储的原理和特点MySQL 5.6 版本为例介绍 MySQL 体系的结构组成MySQL 5.7 版本和 MySQL 8.0 版本做了哪些优化和改进01 MySQL 数据库的体系结构MySQL 体系结构由 Client Connectors 层、MySQL Server 层及存储引擎层组成。Client Connectors 层负责原创 2020-06-17 22:11:19 · 259 阅读 · 0 评论 -
学习笔记 | 完整的MySQL知识体系 思维导图
学习目标:数据库的架构设计、性能调优、大规模数据库集群运维如何利用 MySQL 来支撑互联网的海量数据和高并发请求掌握 MySQL 的底层运行机制,教你如何发挥 MySQL 的最佳性能、让你掌握 MySQL 在互联网应用领域的最佳实践,学会如何处理亿级业务数据和高并发请求。MySQL的主流分支MySQL 的 8 大优点第一个是体积小、速度快,可以在不占用太多资源的情况下提供数据库服务;第二个是开源免费,工具生态完善,用起来没有经济门槛;然后是,简单易用,维护成本低,用起来没有技术原创 2020-06-17 21:13:31 · 3113 阅读 · 0 评论 -
学习笔记 | 按照dept_no进行汇总 group_concat
select dept_no, group_concat(emp_no) as employeesfrom dept_empgroup by dept_no;原创 2020-06-14 12:36:58 · 174 阅读 · 0 评论 -
学习笔记 | 分页查询employees表,每5行一页,返回第2页的数据
select * from employees limit 5 offset 5原创 2020-06-14 12:17:59 · 201 阅读 · 0 评论 -
学习笔记 | 针对库中的所有表生成select count(*)对应的SQL语句
# sqliteselect "select count(*) from "||name||";" as cntsfrom sqlite_master where type='table';原创 2020-06-12 11:07:11 · 337 阅读 · 0 评论 -
学习笔记 | 获取Employees中的first_name | substr函数
# sqliteSELECT first_name FROM employees ORDER BY substr(first_name,length(first_name)-1) asc;SELECT first_name FROM employees ORDER BY substr(first_name,-2) asc; SELECT first_name FROM employees ORDER BY substr(first_name,length(first_name)-1,.原创 2020-06-12 11:05:39 · 187 阅读 · 0 评论 -
学习笔记 | SQL刷题 | 对所有员工的薪水按照salary进行按照1-N的排名 DENSE_RANK
题目描述对所有员工的当前(to_date='9999-01-01')薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列CREATE TABLE `salaries` (`emp_no` int(11) NOT NULL,`salary` int(11) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMARY KEY (`emp_no`,`from_date`));selec原创 2020-06-05 18:25:41 · 232 阅读 · 0 评论 -
学习笔记 | 复制表语句
复制表语句原创 2020-06-04 13:34:31 · 103 阅读 · 0 评论 -
学习笔记 | 更改ALTER表结构
SQLite改变表名 : ALTER TABLE 旧表名 RENAME TO 新表名原创 2020-06-04 12:15:04 · 183 阅读 · 0 评论 -
学习笔记 | SQL常用运算符
➢ 算数运算符➢ 比较运算符SQL数据库中的通配符REGEXP匹配符➢ 逻辑运算符➢ 位运算符原创 2020-06-03 23:21:29 · 392 阅读 · 0 评论 -
学习笔记 | 数据库概述 DB、DBMS、DBS
01 数据Data02 数据库DataBase“按照数据结构来组织、存储和管理数据的仓库”。James.Martin给数据库下了一个比较完整的定义:数据库是存储在一起的相关数据的集合,这些数据是结构化的,无有害的或不必要的冗余,并为多种应用服务。数据的存储独立于使用它的程序。对数据插入新数据、修改和检索原有数据均能按一种公用的和可控制的方式进行。数据库的类型03 数据库管理系统DBMSDBMS的主要功能 For 程序员数据定义功能:提供数据定义语言DDL定义数据库中的数据对象原创 2020-06-03 18:34:09 · 5615 阅读 · 0 评论 -
学习笔记 | pymysql pymysql.err.OperationalError 1045 Access denied解决办法
pymysql pymysql.err.OperationalError 1045 Access denied解决办法jupter notebook上pymysql连接mysql,这时报错pymysql.err.OperationalError: (1045, u"Access denied for user 'root'@'localhost' (using password: No)")**最简单的方法是更换了root密码的认证方式解决的,新版mysql使用的caching_sha2_passw原创 2020-05-24 22:19:08 · 3367 阅读 · 1 评论 -
学习笔记 | mac下查看mysql的端口号
mac下 | 查看mysql的端口号mysql> show global variables like ‘port’;原创 2020-05-24 21:54:42 · 1936 阅读 · 0 评论 -
学习笔记 | MySQL引擎(InnoDB、Mylsam)和区别、MVCC机制
请你说一下MySQL引擎和区别1、MySQL引擎MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多...原创 2020-04-26 11:15:54 · 419 阅读 · 0 评论 -
学习笔记 | Mysql事务并发 4大隔离级别
不同的隔离级别:01 Read Uncommitted 读取未提交内容最低的隔离级别,什么都不需要做,一个事务可以读到另一个事务未提交的结果。所有的并发事务问题都会发生。读取未提交的数据,也被称之为脏读(Dirty Read)。02 Read Committed 读取提交内容只有在事务提交后,其更新结果才会被其他事务看见。可以解决脏读问题。03 Repeated Read ...原创 2020-04-25 17:44:55 · 130 阅读 · 0 评论 -
刷题笔记 | 不准使用order by
题目描述CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT NULL,`first_name` varchar(14) NOT NULL,`last_name` varchar(16) NOT NULL,`gender` char(1) NOT NULL,`hire_date` date ...原创 2020-03-20 16:03:05 · 176 阅读 · 0 评论 -
SQL语句 | where和on的区别、刷题总结
01 where和on的区别数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。在使用left join时,on和where条件的区别如下:1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回...原创 2020-03-20 15:27:22 · 534 阅读 · 0 评论 -
刷题笔记 | SQL查询语句执行顺序
查询中用到的关键词主要包含六个书写顺序依次为 : select–from–where–group by–having–order by其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行 : from–where–group by–having–select–order by先执行from关键字后...原创 2020-03-20 15:17:01 · 143 阅读 · 0 评论