
MySQL
文章平均质量分 78
to_real
这个作者很懒,什么都没留下…
展开
-
mysql 查询一张表在另一张表中不存在的数据
mysql数据库中一张表与另一张表有相同的一个字段,需要过滤出 表t_camera 中在 t_sys_role_camera表中不存在的数据,利用关键字 NOT EXISTS来实现。同理可以使用EXISTS 关键字来查询一张表在另一张表中存在的数据。SELECT *FROM t_camera tWHERE NOT EXISTS ( SELECT * FROM t_sys_role_camera...原创 2022-04-19 16:27:57 · 6931 阅读 · 0 评论 -
mysql去除重复数据
mysql去除重复数据根据one列查询重复的数据(根据单列判断重复)SELECT * FROM tab_testWHERE ONE IN (SELECT ONE FROM testdelete GROUP BY ONE HAVING COUNT(ONE) > 1)删除表中的重复记录:(根据单列删除且保留ID最小的一条)DELETEFROM tab_testWHERE ONE IN(SELECT ONE FROM (SELECT...原创 2022-04-19 16:26:22 · 11158 阅读 · 0 评论 -
MySQL中按周、月、季、年分组统计
根据日期,按照周、月、季、年对数据进行分组统计一、前言 带着问题去学习,我觉得是一种非常有效的学习方法,不知下面的几个问题是否也是你所需要考虑的:被分组的日期是否连续、周是以周日为起始日,还是以周一为起始日、日期跨年。在讨论日期查询的复杂性之前,我们有必要知道一些内建日期处理函数和Date/Time(日期/时间)数据类型,已经有一定了解的快速浏览下就好,直接去后半部分享用正餐。二、内建日期处理函数NOW() 函数 定义和用法:NOW() 返回当前的日期和时间。查询select...转载 2022-02-17 17:51:05 · 4394 阅读 · 1 评论 -
聚集索引,非聚集索引,覆盖索引,
前段时间,公司一个新上线的网站出现页面响应速度缓慢的问题, 一位负责这个项目的但并不是搞技术的妹子找到我,让我想办法提升网站的访问速度 ,因为已经有很多用户来投诉了。我第一反应觉的是数据库上的问题,假装思索了一下,摆着一副深沉炫酷的模样说:“是不是数据库查询上出问题了, 给表加上索引吧”,然后妹子来了一句:“现在我们网站访问量太大,加索引有可能导致写入数据时性能下降,影响用户使用的”。当时我就楞了一下, 有种强行装逼被拆穿的感觉,在自己的专业领域居然被非专业的同学教育, 面子上真有点挂不住。其实, 我说原创 2021-06-15 19:35:26 · 162 阅读 · 0 评论 -
数据库事务
事务并发引发的问题在线购物平台、商品、库存隔离级别1.读未提交2.读已提交3.可重复读4.串行化脏读:读到未提交的数据不可重复读:一个事务中读到不同的结果(读的过程中,别的事务提交了)幻读:查询隔离级别select @@tx_isolation;//设置read uncommitted级别:set session transaction isolation level read uncommitted;//设置read committed级别:s.原创 2021-05-17 22:03:43 · 106 阅读 · 1 评论 -
常见分布式唯一ID生成策略及它们的优缺点对比
全局唯一的 ID 几乎是所有系统都会遇到的刚需。这个 id 在搜索, 存储数据, 加快检索速度 等等很多方面都有着重要的意义。有多种策略来获取这个全局唯一的id,针对常见的几种场景,我在这里进行简单的总结和对比。简单分析一下需求所谓全局唯一的 id 其实往往对应是生成唯一记录标识的业务需求。这个 id 常常是数据库的主键,数据库上会建立聚集索引(cluster index),即在物理存储上以这个字段排序。这个记录标识上的查询,往往又有分页或者排序的业务需求。所以往往要有一个time字段,并且在t原创 2021-05-13 17:55:09 · 270 阅读 · 0 评论 -
MySQL与Redis缓存的同步方案
本文介绍MySQL与Redis缓存的同步的两种方案 通过MySQL自动同步刷新Redis,MySQL触发器+UDF函数实现 解析MySQL的binlog实现,将数据库中的数据同步到Redis 一、方案1(UDF)场景分析:当我们对MySQL数据库进行数据操作时,同时将相应的数据同步到Redis中,同步到Redis之后,查询的操作就从Redis中查找过程大致如下: 在MySQL中对要操作的数据设置触发器Trigger,监听操作 客户端(NodeServer)向M原创 2021-05-13 16:44:49 · 138 阅读 · 0 评论 -
MySQL 百万级数据,怎么做分页查询
方法1: 直接使用数据库提供的SQL语句 方法2: 建立主键或唯一索引, 利用索引(假设每页10条) 方法3: 基于索引再排序 方法4: 基于索引使用prepare 方法6: 利用"子查询/连接+索引"快速定位元组的位置,然后再读取元组. 测试实验 方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级..原创 2021-05-11 15:13:58 · 223 阅读 · 0 评论 -
mysql优化之(use temporary、use filesort)
目录一、use temporary二、use filesort三、extra的其它字段说明一、use temporary为了解决查询,MySQL需要创建一个临时表来容纳结果。use temporary产生条件: 如果GROUP BY 的列没有索引,产生临时表. 如果GROUP BY时,SELECT的列不止GROUP BY列一个,并且GROUP BY的列不是主键 ,产生临时表. 如果GROUP BY的列有索引,ORDER BY的列没索引.产生临时表. 如...原创 2021-05-10 18:00:27 · 3360 阅读 · 0 评论 -
MySQL高级之索引面试题分析
索引优化简单案例单表需求:查询category_id为1 且 comments大于1 的情况下,views最多的id1、无索引的情况下:很显然,type是ALL,即最坏的情况,Extra还出现了Using filesort也是最坏的情况,必须优化2、优化一:where条件全部建索引复合索引中的使用到的“comments > 1”是一个范围检索,带来的好处是将type提升为range,只需检索部分索引,但却导致mysql无法利用索引再对后面的vi...原创 2021-05-10 17:48:16 · 129 阅读 · 0 评论 -
mysql优化
技巧1 比较运算符能用 “=”就不用“<>”“=”增加了索引的使用几率。技巧2 明知只有一条查询结果,那请使用 “LIMIT 1”“LIMIT 1”可以避免全表扫描,找到对应结果就不会再继续扫描了。技巧3 为列选择合适的数据类型能用TINYINT就不用SMALLINT,能用SMALLINT就不用INT,道理你懂的,磁盘和内存消耗越小越好嘛。技巧4 将大的DELETE,UPDATE or INSERT 查询变成多个小查询能写一个几十行、几百行的SQL语句是不是显...原创 2021-02-14 12:21:15 · 110 阅读 · 0 评论 -
in与not in、exists与not exists的区别以及性能分析
1、in和existsin是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in和exists差别不大;如果两个表中一个较小一个较大,则子查询表大的用exists,子查询表小的用in;例如:表A(小表),表B(大表)select*fromAwhereccin(selectccfromB)-->效率低,用到了A表上cc列的索引;...原创 2021-02-05 11:38:29 · 991 阅读 · 0 评论 -
MySQL是如何保证不丢数据的
进入正题前先简单看看MySQL的逻辑架构,相信我用的着。MySQL逻辑架构MySQL的逻辑架构大致可以分为三层: 第一层:处理客户端连接、授权认证,安全校验等。 第二层:服务器server层,负责对SQL解释、分析、优化、执行操作引擎等。 第三层:存储引擎,负责MySQL中数据的存储和提取。 我们要知道MySQL的服务器层是不管理事务的,事务是由存储引擎实现的,而MySQL中支持事务的存储引擎又属InnoDB使用的最为广泛,所以后续文中提到的存储引擎都以InnoD原创 2021-02-01 17:03:48 · 306 阅读 · 0 评论 -
2021-01-29
在软件开发的过程中,数据库设计是非常重要的,它需要根据需求分析设抽象出E-R图,逻辑结构设计,数据库选型,物理设计,实施及运维。下面就聊聊那些年数据库设计的那些事。软件工程在问题定义和可行性分析都做好的前提下,就可以进入需求分析阶段了,通常来讲,一般都有产品部,需求分析往往都是由产品经理和客户去沟通落地形成PRD,跟开发沟通之后,就可以根据需求分析做数据库设计了,下面主要讨论下数据库设计的步骤以及每个阶段要完成的内容。数据库设计基本步骤需求分析阶段要进行数据库设计首先要了解用户需原创 2021-01-29 17:58:50 · 1057 阅读 · 0 评论 -
多表查询
这篇文章将会详细的总结mysql中多表查询的相关语句,即mysql中的交叉连接、内连接、外链接、左连接、右连接、联合查询、全连接。在本博客中,"mysql"是一个系列文章,这些文章主要对mysql/mariadb的常用知识点进行了总结,每一篇博客总结的知识点有所不同,具体内容可参考mysql文章列表。mysql文章列表直达链接:mysql知识点总结多表查询顾名思义就是数据同时从多张表中获得,查询语句牵扯到多张表,多表查询有多种语法,多种使用场景,不同的场景需要不同的语法,我们先不考...原创 2021-01-23 17:09:06 · 428 阅读 · 0 评论 -
8种最坑的SQL错误用法
1、LIMIT 语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。好吧,可能90%以上的 DBA 解决该问题就到此为止。但当 LIMIT 子句变成 “LIMIT 1000000,10” 时,程序员仍然会抱怨:我只取10条记录为什么还是慢?要知道数据库也并不知道第1000000条记录从什么地方开始,即使有索引也需要原创 2020-10-29 10:31:37 · 121 阅读 · 0 评论 -
读书笔记_mysql必知必会_21_创建和操作表
创建表表创建基础为利用CREATE TABLE创建表,必须给出下列信息: 新表的名字,在关键字CREATE TABLE之后给出 表列的名字和定义,用逗号分隔使用NULL值允许NULL值的列也允许在插入行时不给出该列的值。不允许NULL值的列不接受该列没有值的行, 换句话说,在插入或更新行时,该列必须有值。每个表列或者是NULL列,或者是NOT NULL列,这种状态在创建时由表的定义规定。主键再介绍主键值必须唯一。即,表中的每个行必须具有唯一的主原创 2020-08-07 07:23:53 · 133 阅读 · 0 评论 -
读书笔记_mysql必知必会_22_使用视图
视图(只包含使用时动态检索数据的查询,不包含数据)视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询作为视图,它不包含表中应该有的任何列或数据,它包含的是一个SQL查询(与上面用以正确联结表的相同的查询)。为什么使用视图 重用SQL语句。 简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道它的基本查询细节。 使用表的组成部分而不是整个表。 保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。 ..原创 2020-08-06 18:16:44 · 137 阅读 · 0 评论 -
读书笔记_mysql必知必会_23_使用存储过程
目录存储过程为什么要使用存储过程(简单、安全、高性能)使用存储过程执行存储过程创建存储过程删除存储过程使用参数建立智能存储过程检查存储过程存储过程经常会有一个完整的操作需要多条语句才能完成。例如,考虑以下的情形。 为了处理订单,需要核对以保证库存中有相应的物品。 如果库存有物品,这些物品需要预定以便不将它们再卖给别的人, 并且要减少可用的物品数量以反映正确的库存量。 库存中没有的物品需要订购,这需要与供应商进行某种交互。 关于哪些物品原创 2020-08-06 17:26:43 · 318 阅读 · 0 评论 -
读书笔记_mysql必知必会_24_使用游标
游标MySQL检索操作返回一组称为结果集的行。这组返回的行都是与SQL语句相匹配的行(零行或多行)使用简单的SELECT语句,例如,没有办法得到第一行、下一行或前10行,也不存在每次一行地处理所有行的简单方法(相对于成批地处理它们)有时,需要在检索出来的行中前进或后退一行或多行。这就是使用游标的原因游标(cursor)是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其...原创 2020-08-06 15:57:58 · 189 阅读 · 0 评论 -
读书笔记_mysql必知必会_25_使用触发器
目录创建触发器删除触发器使用触发器INSERT触发器DELETE触发器UPDATE触发器关于触发器的进一步介绍如果你想要某条语句(或某些语句)在事件发生时自动执行 每当增加一个顾客到某个数据库表时,都检查其电话号码格式是否正确,州的缩写是否为大写; 每当订购一个产品时,都从库存数量中减去订购的数量; 无论何时删除一行,都在某个存档表中保留一个副本。的共同之处是它们都需要在某个表发生更改时自动处理。触发器是MySQL响应以下...原创 2020-08-06 14:15:13 · 167 阅读 · 0 评论 -
读书笔记_mysql必知必会_26_管理事务处理
事务处理并非所有引擎都支持事务处理MyISAM和InnoDB是两种最常使用的引擎。前者不支持明确的事务处理管理,而后者支持。事务处理(transaction processing)可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。事务处理是一种机制,用来管理必须成批执行的MySQL操作,以保证数据库不包含不完整的操作结果。利用事务处理,可以保证一组操作不会中途停止,它们或者作为整体执行,或者完全不执行(除非明确指示)。如果没有错误发生,整组语..原创 2020-08-06 13:02:04 · 193 阅读 · 0 评论 -
读书笔记_mysql必知必会_27_全球化和本地化
目录字符集和校对顺序使用字符集和校对顺序字符集和校对顺序数据库表被用来存储和检索数据。不同的语言和字符集需要以不同的方式存储和检索。因此,MySQL需要适应不同的字符集(不同的字母和字符),适应不同的排序和检索数据的方法。 字符集为字母和符号的集合; 编码为某个字符集成员的内部表示; 校对为规定字符如何比较的指令。使用字符集和校对顺序通常系统管理在安装时定义一个默认的字符集和校对。此外,也可以在创建数据库时,指定默认的字符集和校对。为了确定..原创 2020-08-05 22:26:09 · 152 阅读 · 0 评论 -
读书笔记_mysql必知必会_28_访问控制
访问控制MySQL服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少。换句话说,用户不能对过多的数据具有过多的访问权。考虑以下内容: 多数用户只需要对表进行读和写,但少数用户甚至需要能创建和 删除表; 某些用户需要读表,但可能不需要更新表; 你可能想允许用户添加数据,但不允许他们删除数据; 某些用户(管理员)可能需要处理用户账号的权限,但多数用户 不需要; 你可能想让用户通过存储过程访问数据,但不允许他们直接访问 .原创 2020-08-05 20:15:14 · 277 阅读 · 0 评论 -
读书笔记_mysql必知必会_29_数据库维护
数据库备份由于MySQL数据库是基于磁盘的文件,普通的备份系统和例程就能备份MySQL的数据。 但是,由于这些文件总是处于打开和使用状态,普通的文件副本备份不一定总是有效使用命令行实用程序mysqldump转储所有数据库内容到某个外部文件。在进行常规备份前这个实用程序应该正常运行,以便能正确地备份转储文件 可用命令行实用程序mysqlhotcopy从一个数据库复制所有数据(并非所有数据库引擎都支持这个实用程序) 可以使用MySQL的BACKUP TABLE或SELECT INTO OUTF原创 2020-08-05 16:02:17 · 270 阅读 · 0 评论 -
读书笔记_mysql必知必会_30_改善性能
1.MySQL(与所有DBMS一样)具有特定的硬件建议,对用于生产的服务器来说,应该坚持遵循这些硬件建议。2.一般来说,关键的生产DBMS应该运行在自己的专用服务器上。3.MySQL是用一系列的默认设置预先配置的,从这些设置开始通常是很好的。但过一段时间后你可能需要调整内存分配、缓冲区大小等(为查看当前设置,可使用SHOW VARIABLES;和SHOW STATUS;)4.MySQL一个多用户多线程的DBMS,换言之,它经常同时执行多个任务。如果这些任务中的某一个执...原创 2020-08-05 15:31:40 · 101 阅读 · 0 评论