数据库
文章平均质量分 91
Young丶
这个作者很懒,什么都没留下…
展开
-
聊聊数据库优化的4大手段
当有人问你如何对数据库进行优化时,很多人第一反应想到的就是SQL优化,如何创建索引,如何改写SQL,他们把数据库优化与SQL优化划上了等号。当然这不能算是完全错误的回答,只不过思考的角度稍微片面了些,太“程序员思维”化了,没有站在更高层次来思考回答。那今天我们就将视角拔高,站在架构的角度来聊聊这一问题,数据库优化可以从哪些维度入手?正如上图所示,数据库优化可以从架构优化,硬件优化,DB优化,SQL优化四个维度入手。此上而下,位置越靠前优化越明显,对数据库的性能提升越高。我们常说的SQL优化反而是对性原创 2021-12-22 09:12:00 · 3797 阅读 · 0 评论 -
公司用的 MySQL 团队开发规范,非常详细,
数据库对象命名规范数据库对象数据库对象是数据库的组成部分,常见的有以下几种:表(Table )、索引(Index)、视图(View)、图表(Diagram)、缺省值(Default)、规则(Rule)、触发器(Trigger)、存储过程(Stored Procedure)、 用户(User)等。命名规范是指数据库对象如数据库(SCHEMA)、表(TABLE)、索引(INDEX)、约束(CONSTRAINTS)等的命名约定。数据库对象全局命名规范1、命名使用具有意义的英文词汇,词汇中间以下划线分隔2原创 2021-12-01 17:41:46 · 3531 阅读 · 0 评论 -
MySQL为Null导致莫名其妙的5大坑
正式开始之前,我们先来看下 MySQL 服务器的配置和版本号信息,如下图所示:“兵马未动粮草先行”,看完了相关的配置之后,我们先来创建一张测试表和一些测试数据。-- 如果存在 person 表先删除DROP TABLE IF EXISTS person; -- 创建 person 表,其中 username 字段可为空,并为其设置普通索引CREATE TABLE person ( id INT PRIMARY KEY auto_increment, name VARCHAR(20), mo原创 2021-11-05 00:44:27 · 2388 阅读 · 0 评论 -
一口气说出 6 种 @Transactional 注解的失效场景
一、事务事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种。编程式事务:是指在代码中手动的管理事务的提交、回滚等操作,代码侵入性比较强,如下示例:try { //TODO something transactionManager.commit(status);} catch (Exception e) { transactionManager.rollback(status); throw new Invo转载 2021-04-30 13:48:32 · 379 阅读 · 0 评论 -
彻底给你讲清楚分布式事务原理
0. 前言从 CPU 到内存、到磁盘、到操作系统、到网络,计算机系统处处存在不可靠因素。工程师和科学家努力使用各种软硬件方法对抗这种不可靠因素,保证数据和指令被正确地处理。在网络领域有 TCP 可靠传输协议、在存储领域有 Raid5 和 Raid6 算法、在数据库领域有 基于 ARIES 算法理论实现的事务机制……这篇文章先介绍单机数据库事务的 ACID 特性,然后指出分布式场景下操作多数据源面临的困境,引出分布式系统中常用的分布式事务解决方案,这些解决方案可以保证业务代码在操作多个数据源的时候,能够像原创 2021-04-29 17:40:25 · 586 阅读 · 0 评论 -
千言万语汇总的Mybatis-plus常用API全套教程
前言官网:https://baomidou.com/创建数据库数据库名为mybatis_plus创建表创建user表DROP TABLE IF EXISTS user;CREATE TABLE user(id BIGINT(20) NOT NULL COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',age INT(11) NULL DEFAULT NULL COMMENT '年龄',email VARC原创 2021-03-24 00:40:38 · 489 阅读 · 0 评论 -
MySQL索引原理
MySQL索引原理索引目的我们为什么要建索引,原因很简单索引可以提高查询效率,可以类比图书中目录。这里就不再赘述索引的优势,请自行查阅资料。索引原理除了图书的目录,我们在生活中会经常发现类似的事情,如字典、火车站的车次表等。它们的原理都是一样的,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是我们总是通过同一种查找方式来锁定数据。数据库也是一样,但显然要复杂许多,因为不仅面临着等值查询,还有范围查询(>、<、between、in)、模糊查询原创 2021-02-01 16:08:04 · 1176 阅读 · 0 评论 -
分布式缓存灵魂十连,你能坚持几个?
“今天无聊来撩一下分布式缓存,希望你们喜欢~目录前言目前工作中用到的分布式缓存技术有redis和memcached两种,缓存的目的是为了在高并发系统中有效降低DB的压力,但是在使用的时候可能会因为缓存结构设计不当造成一些问题,这里会把可能遇到的坑整理出来,方便日后查找。一. 常用的两种缓存技术的服务端特点1. Memcache服务端Memcache(下面简称mc)服务端是没有集群概念的,所有的存储分发全部交由mc client去做,我这里使用的是xmemcached,这个客户端支持多种哈.原创 2021-01-14 12:02:39 · 1193 阅读 · 0 评论 -
操作所有的数据库免费可视化界面靠它就够了,告别付费,告别白嫖,卸载Navicat!
虽然有很多 SQL Client 可以操作数据库,但若仔细观察会发现能满足跨平台、支持众多主流数据库系统、以图形化接口操作数据、提供多种汇入输出方式且以独立应用程序运作的选择还真没几个,可能很多程序员都倾向于选择Navicat。和大家分享另一款基于Java 开发,免费开源的通用数据库管理和开发工具——DBeaver。DBeaver适用于所有开发人员、SQL程序员、数据库管理员和分析人员等,它支持任何具有JDBC驱动程序的数据库,EE版本还支持非JDBC数据源(MongoDB,Cassandra,Redis原创 2020-12-30 14:32:52 · 2423 阅读 · 0 评论 -
mysql 索引巧用,SQL语句写得忒野了
今天来分享几个MySQL常见的SQL错误**(不当)用法。我们在作为一个初学者时,很有可能自己在写SQL时也没有注意到这些问题,导致写出来的SQL语句效率低下,所以我们也可以自省自检一下。1. LIMIT 语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般DBA想到的办法是在type, name, create_time字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。SELECT * FROM operation WHERE typ原创 2020-12-15 18:43:11 · 1738 阅读 · 0 评论 -
超详细的mysql分库分表方案
我们都知道,随着业务量的增长,数据量也会随之增加,这个时候就需要关注业务大表,因为大表会影响查询性能,DDL变更时间很长,影响业务的可用性,同时导致从库延迟很大,如果业务做了读写分离,导致用户重复操作产生脏数据,例如重复下单。今天就跟大家讨论下那些年MySQL使用过的分表分库的方案,分表分库后的问题以及解决方案,希望对您有新的收获哦。MySQL表大小限制** **MySQL一般安装部署在Linux操作系统上(例如CentOS 7.4),默认都是InnoDB存储引擎,且开启了独立表空间选项(参数inno原创 2020-12-07 17:39:04 · 26346 阅读 · 0 评论 -
SQL注入详解
一:什么是sql注入SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。二:SQL注入攻击的总体思路1:寻找到SQL注入的位置2:判断服务器类型和后台数据库类型3:针对不同的服务器和数据库特点进行SQL注入攻击三:SQL注入攻击实例String sql = "select * from user_table where username=' "+userName+" ' and passwo原创 2020-10-29 13:38:47 · 579 阅读 · 0 评论 -
MySQL 高频面试题,都在这了
前言本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐心和瓜子矿泉水.前一阵系统的学习了一下MySQL,也有一些实际操作经验,偶然看到一篇和MySQL相关的面试文章,发现其中的一些问题自己也回答不好,虽然知识点大部分都知道,但是无法将知识串联起来.因此决定搞一个MySQL灵魂100问,试着用回答问题的方式,让自己对知识点的理解更加深入一点.此文不会事无巨细的从select的用法开始讲解mysql,主要针对的是开发人员需要知道的一些MySQL的知识点,主要包括索引原创 2020-10-12 09:14:23 · 1790 阅读 · 0 评论 -
这么设计,Redis 10亿数据量只需要100MB内存
本文主要和大家分享一下redis的高级特性:bit位操作。本文redis试验代码基于如下环境:操作系统:Mac OS 64位 版本:Redis 5.0.7 64 bit 运行模式:standalone moderedis位操作reids位操作也叫位数组操作、bitmap,它提供了SETBIT、GETBIT、BITCOUNT、BITTOP四个命令用于操作二进制位数组。先来看一波基本操作示例:SETBIT语法:SETBIT key offset value即:命令 key 偏移量 0/1原创 2020-09-23 10:17:11 · 1108 阅读 · 0 评论 -
万字总结:学习MySQL优化原理,这一篇就够了!
前言说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型… 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用。MySQL逻辑架构如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器。下图展示了MySQL的逻辑架构图。MySQ原创 2020-09-21 12:30:01 · 1493 阅读 · 0 评论 -
面试官:你说熟悉MySQL,那来谈谈InnoDB怎么解决幻读的?
1. 结论首先说结论,在RR的隔离级别下,Innodb使用MVCC和next-key locks解决幻读,MVCC解决的是普通读(快照读)的幻读,next-key locks解决的是当前读情况下的幻读。2. 幻读是什么事务A,先执行:update table set name=“hh” where id>3;结果为:OK row xx 表名成功影响多少行数据事务B,后执行,并且提交:insert into table values(11, uu);commit;事务A,然后再sel原创 2020-09-18 17:32:02 · 1174 阅读 · 0 评论 -
这一篇让你真正理解Mysql的四种隔离级别
什么是事务事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。事务的结束有两种,当事务中的所有步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消之前到事务开始时的所有操作。事务的 ACID事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简原创 2020-08-10 11:13:23 · 1057 阅读 · 0 评论 -
面试官扎心一问:数据量很大,分页查询很慢,有什么优化方案?
准备工作一般分页查询使用子查询优化使用 id 限定优化使用临时表优化关于数据表的id说明当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多种方法和优化的点。下面简单说一下我知道的一些方法。准备工作为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明。表名:order_history描述:某个业务的订单历史表主要字段:unsigned int id,tinyint(4.转载 2020-08-05 09:43:44 · 1278 阅读 · 0 评论 -
MySQL中一条SQL是如何执行的?
MySQL简介MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为数据库近年来,随着MySQL的不断发展,越来越多的互联网公司也选择了MySQ作为数据库存储,其中不乏一些大厂,说明MySQL越来越受开发者的青睐MySQL体系结构Connectors组件提供对外的连接,供JDBC、ODBC、PHP、 Python等进行数据库连接连接池组件(C原创 2020-07-06 14:39:06 · 1290 阅读 · 0 评论 -
高并发下的redis击穿,你需要了解下布隆过滤器
在高并发读的情况下缓存是不可少的。关于高并发缓存方面大小可以参考博主这篇文章好了接下来进入正题:大家看下上方的这幅图,用户可能进行了一次条件错误的查询,这时候 redis 是不存在的,按照常规流程就是去数据库找了,可是这是一次错误的条件查询,数据库当然也不会存在,也不会往 redis 里面写值,返回给用户一个空,这样的操作一次两次还好,可是次数多了还了得,我放 redis 本来就是为了挡一挡,减轻数据库的压力,现在 redis 变成了形同虚设,每次还是去数据库查找了,这个就叫做缓存穿透,相当于 red原创 2020-07-02 14:12:25 · 1479 阅读 · 0 评论 -
MongoDB:快速入门,掌握这些刚刚好!
虽说现在关系型数据库还是主流,但是面对某些需求的时候,需要非关系型数据库来补充它,学习一个主流的NoSQL数据库还是很有必要的。MongoDB是一个功能丰富的NoSQL数据库,本文整理了它最常用的部分形成了这篇入门教程,希望对大家有所帮助。简介MongoDB是一个基于分布式文件存储的数据库。由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系型数据库的。安装以前写的Mong.原创 2020-06-30 14:54:53 · 1326 阅读 · 0 评论 -
MySQL 优化必经之路, Explain执行计划 ?
上边只是简单介绍了下Explain执行计划各个列的含义,了解它不仅仅是要应付面试,在实际开发中也经常会用到。比如对慢SQL进行分析,如果连执行计划结果都不会看,那还谈什么SQL优化呢?原创 2020-06-30 09:21:09 · 1672 阅读 · 0 评论 -
MySQL开发 日志文件必备的知识点
MySQL 日志文件开发必备的知识点参考来源:juejin.im/post/5b7c0aabf265da438415b9eb前言日志文件记录了影响MySQL数据库的各种类型活动,MySQL数据库中常见的日志文件有错误日志,二进制日志,慢查询日志和查询日志。下面分别对他们进行介绍。错误日志错误日志文件对MySQL的启动,运行,关闭过程进行了记录。mysql> show variables like 'log_error';+---------------+---------------原创 2020-06-30 09:20:33 · 1241 阅读 · 0 评论 -
数据库缓存最终一致性的四种方案
数据库缓存最终一致性的四种方案背景缓存是软件开发中一个非常有用的概念,数据库缓存更是在项目中必然会遇到的场景。而缓存一致性的保证,更是在面试中被反复问到,这里进行一下总结,针对不同的要求,选择恰到好处的一致性方案。缓存是什么存储的速度是有区别的。缓存就是把低速存储的结果,临时保存在高速存储的技术。如图所示,金字塔更上面的存储,可以作为下面存储的缓存。我们本次的讨论,主要针对数据库缓存场景,将以redis作为mysql的缓存为案例来进行。为什么需要缓存存储如mysql通常支持完整的ACID特原创 2020-06-29 13:32:38 · 1874 阅读 · 0 评论 -
几大流行的NoSql的主要区别,你在用Redis、ElasticSearch还是MongoDB ?
RedisRedis的优点:支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)支持持久化操作,可以进行aof(将Reids的操作日志以追加的方式写入文件)及rdb(Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化)数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。支持通过Replication进行数据复制,通过master-slave机原创 2020-06-29 10:00:22 · 2983 阅读 · 2 评论 -
详解 Mysql LEFT JOIN和JOIN查询区别及原理
一、Join查询原理查询原理:MySQL内部采用了一种叫做 nested loop join(嵌套循环连接)的算法。Nested Loop Join 实际上就是通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果。如果还有第三个参与 Join,则再通过前两个表的 Join 结果集作为循环基础数据,再一次通过循环查询条件到第三个表中查询数据,如此往复,基本上MySQL采用的是最容易理解的算法来实现join。所以驱动表的选择非常重要,驱动表的数据原创 2020-06-28 10:42:06 · 24219 阅读 · 7 评论 -
MySQL百万级、千万级数据多表关联SQL语句调优
有的时候我们在操作数据库时会将两个或多个数据表关联起来通过一些条件筛选数据,在关联表时我们要遵循一些原则,这样会使我们编写的SQL 语句在效率上快很多。一、优化原则小表驱动大表,即小的数据集驱动大得数据集。在知道什么是小表驱动达大表之前,我们先来了解两个查询关键字,IN 与 EXISTS。我们通过两段查询语句先来了解一下它们的作用。我建立了两张表,一张员工表,一张部门表,员工表中有部门id 这个属性,将这两张表关联起来。我们先使用IN 来查询数据:本文不涉及复杂的底层数据结构,通过explain解释原创 2020-06-21 16:53:25 · 3923 阅读 · 0 评论 -
MySQL IN、Exist关联查询时,我们为什么建议小表驱动大表?
有的时候我们在操作数据库时会将两个或多个数据表关联起来通过一些条件筛选数据,在关联表时我们要遵循一些原则,这样会使我们编写的SQL 语句在效率上快很多。一、优化原则小表驱动大表,即小的数据集驱动大得数据集。在知道什么是小表驱动达大表之前,我们先来了解两个查询关键字,IN 与 EXISTS。我们通过两段查询语句先来了解一下它们的作用。我建立了两张表,一张员工表,一张部门表,员工表中有部门id 这个属性,将这两张表关联起来。我们先使用IN 来查询数据:SELECT * FROM t_emp WHER原创 2020-06-21 10:06:32 · 1504 阅读 · 1 评论 -
一手好 SQL 是如何炼成的?
目录MySQL性能最大数据量最大并发数查询耗时0.5秒实施原则数据表设计数据类型避免空值text类型索引优化索引分类优化原则SQL优化分批处理不做列运算避免Select *操作符<>优化OR优化IN优化LIKE优化JOIN优化LIMIT优化其他数据库博主负责的项目主要采用阿里云数据库MySQL,最近频繁出现慢SQL告警,执行时间最长的竟然高达5分钟。导出日志后分析,主要原因竟然是没有命中索引和没有分页处理。原创 2020-05-09 14:04:59 · 396 阅读 · 0 评论 -
mysql变量使用总结
使用select定义用户变量的实践将如下语句改成select的形式: set @VAR=(select sum(amount) from penalties);我的修改: select @VAR:=(select sum(amount) from penalties);我这样改,虽然是可以的。但是,对比的书中的答案,发现这样的方式太蹩脚了。说明没有很好地理解select定义原创 2016-12-22 10:35:48 · 408 阅读 · 0 评论 -
MySQL存储过程详解
1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控原创 2016-12-21 19:05:06 · 513 阅读 · 0 评论 -
mysql存储过程语法及实例
存储过程如同一门程序设计语言,同样包含了数据类型、流程控制、输入和输出和它自己的函数库。--------------------基本语法--------------------一.创建存储过程create procedure sp_name()begin.........end二.调用存储过程1.基本语法:call sp_name()注意:存储过程名称后面必转载 2016-12-21 19:02:46 · 406 阅读 · 0 评论 -
常用的Mysql数据库操作语句大全
零、用户管理: 1、新建用户: >CREATE USER name IDENTIFIED BY 'ssapdrow'; 2、更改密码: >SET PASSWORD FOR name=PASSWORD('fdddfd'); 3、权限管理 >SHOW GRANTS FOR name; //查看name用户权限原创 2016-12-21 19:01:19 · 869 阅读 · 0 评论 -
sqlite3自增key设定(创建自增字段)
在用sqlite设计表时,每个表都有一个自己的整形id值作为主键,其实可以不指定这么一个id值,sqlite内部本来就会为每个表加上一个 rowid,这个rowid可以当成一个隐含的字段使用,但是由sqlite引擎来维护的,在3.0以前rowid是32位的整数,3.0以后是 64位的整数,为什么不直接使用这个内部的rowid作为每个表的id主键呢。相关的文档在这里:?http://www.原创 2016-05-11 14:01:58 · 2469 阅读 · 0 评论 -
参数化查询 但未提供该参数(将null插入数据库)
当你是使用参数化查询时为参数赋值时,比如command.Parameters.Add("@a",SqlDbType.Text,30).Value=a;当a=null是将报错:错参数化查询 '(@a varchar(100)....' 需要参数 '@a',但未提供该参数只是因为你给a的值为null,而数据库中的null(空)是System.DBNull 类型的不是同一类。所以在插原创 2015-05-17 18:37:12 · 8869 阅读 · 2 评论 -
SQL参数化查询
参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入攻击 (SQL Injection) 的攻击手法的防御方式。原理 在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL原创 2015-05-17 18:23:40 · 2253 阅读 · 0 评论 -
mysql游标示例mysql游标简易教程
从mysql V5.5开始,进行了一次大的改变,就是将InnoDB作为默认的存储引擎。InnoDB支持事务,而且拥有相关的RDBMS特性:ACID事务支持,数据完整性(支持外键),灾难恢复能力等等。现在简单总结一下游标的知识。(一),认识游标(cursor)就是一个可读的标识,用来标识数据取到什么地方了。(二),游标特性1,只读2,不滚动3,不敏感的(三),使用游标原创 2016-12-22 11:03:03 · 1057 阅读 · 0 评论 -
介绍一下索引的类型
一、介绍一下索引的类型Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引 PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) UNIQUE(唯一索引) ALTER TABLE `table_name` ADD UNIQUE (`column`) INDEX(普通索引)原创 2017-07-29 17:28:10 · 816 阅读 · 0 评论 -
MySQL各版本的区别
在这个下载界面会有几个版本的选择。 1. MySQL Community Server 社区版本,开源免费,但不提供官方技术支持。2. MySQL Enterprise Edition 企业版本,需付费,可以试用30天。3. MySQL Cluster 集群版,开源免费。可将几个MySQL Server封装成一个Server。4. MySQL Cluster CGE 高原创 2017-07-20 11:41:43 · 792 阅读 · 0 评论 -
mysql 5.7 安装错误提示总结
安装步骤:MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的。如果是msi格式的可以直接点击安装,按照它给出的安装提示进行安装(相信大家的英文可以看懂英文提示),一般MySQL将会安装在C:\Program Files\MySQL\MySQL Server 5.6 该目录中;zip格式是自己解压,解压缩之后其实MySQL就可以使用了,但是要进原创 2017-03-30 23:54:04 · 5280 阅读 · 0 评论