mysql
mysql数据库
Jaymeng8848
攀爬每一个巨人,站在他们肩膀上看一看
展开
-
MySql优化
转自:https://blog.csdn.net/tiantang_zy/article/details/1051562321、查询缓存MySQL Query Cache是用来缓存我们所执行的SELECT语句以及该语句的结果集,MySql在实现Query Cache的具体技术细节上类似典型的KV存储,就是将SELECT语句和该查询语句的结果集做了一个HASH映射并保存在一定的内存区域中。当客户端发起SQL查询时,Query Cache的查找逻辑是,先对SQL进行相应的权限验证,接着就通过Query Ca转载 2020-09-22 09:21:42 · 166 阅读 · 0 评论 -
SQL中ON和WHERE的区别
摘自:https://www.cnblogs.com/guanshan/articles/guan062.html数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。在使用left jion时,on和where条件的区别如下:1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真转载 2020-09-10 10:29:33 · 376 阅读 · 0 评论 -
SQL中的连接方式
sql语句中的连接方式两张表 部门表(dept)和员工表(usert)中所有的数据1.–左连接 usert(员工表) dept(部门表)–显示员工信息时,有的员工可能还没有分配到某个具体的部门(新进员工),其所属部门一项就没有数据,但是员工仍然需要显示,即员工表数据需要全部显示select u.name,d.deptname from usert u left join dept d on u.deptid=d.deptid order by u.id2.–右连接–新部门还没有员工,显示时转载 2020-09-10 09:52:18 · 1060 阅读 · 0 评论 -
delete truncate 缺省
1、处理效率:drop>trustcate>delete2、drop删除整个表;trustcate删除全部记录,但不删除表;delete删除部分记录3、delete不影响所用extent,高水线保持原位置不动;trustcate会将高水线复位。在使用truncate时一定要注意,虽然可以恢复,但为了减少麻烦,还是要慎重。如果想删除部分数据用delete,注意带上where子句,回滚段要足够大;如果想保留表而将所有数据删除,如果和事务无关,用truncate即可;如果和事务有关,或者原创 2020-08-21 08:42:39 · 236 阅读 · 0 评论 -
MySQL可重复读隔离级别的实现原理
1、原理MySQL默认的隔离级别是可重复读,即:事务A在读到一条数据之后,此时事务B对该数据进行了修改并提交,那么事务A再读该数据,读到的还是原来的内容。 那么MySQL可重复读是如何实现的呢?使用的的一种叫MVCC的控制方式 ,即Mutil-Version Concurrency Control,多版本并发控制,类似于乐观锁的一种实现方式实现方式:InnoDB在每行记录后面保存两个隐藏的列来,分别保存了这个行的创建时间和行的删除时间。这里存储的并不是实际的时间值,而是系统版本号,当数据被修改时,版原创 2020-08-18 08:09:42 · 1590 阅读 · 1 评论 -
搭建单机多实例mysql集群实现主从和读写分离
因为自己使用,只购买了一个阿里云服务器,强化性能肯定是在单服务器上搭建多mysql实例并实现主从和读写分离。遂开始查找教程这个博主的方法非常详细,一步一步安装,保证成功https://my.oschina.net/u/2426590/blog/1831211记录启动与关闭:启动三个实例:/etc/rc.d/init.d/mysqld_multi start 1-3启动三个MySQL实例,注意这里的数字和my.cnf中的[mysqldN]对应,1-3就是启动[mysqld1]、[mysqld2原创 2020-08-08 10:16:36 · 369 阅读 · 0 评论 -
列举MySql5.7 my.cnf中的主要参数
列举MySql5.7 my.cnf中的主要参数场景描述最近在做mysql server的性能优化,mysql服务端的优化基本上通过调节my.cnf中的参数配置实现的,又鉴于5.7版本相比较老版本,新增并取消了部分参数,优化所需的参数差异较大,于是在网上搜集了mysql5.7主要参数以及说明,在这里与大家分享。 本篇内容为转载至博客园,作者为换你一世迷离,地址:传送门,侵权删。配置样例首先提供一个我使用的配置样例[client] #password=88888888 socket=/dat转载 2020-07-28 20:45:27 · 538 阅读 · 0 评论 -
mysql5.7集群方案
对比部署方案随着平台升级,单节点数据库提供服务已力不从心。现在需要确定一套集群方案用以部署mysql5.7集群。在这里和大家分享下经历,难免会有些许错误,请各位看官不吝赐教。需求明确可以预见数据库运行的环境如下:内网运行部署维护便利考虑迁移性定期备份横向扩展主备,热切换,读写分离,易恢复ok,需求明确了,下一步寻找方案对比方案 我们团队在开发前期前期已确定数据库采用mysql5.7,再此基础上搜索了主流的集群部署方式。MySQL Replication架构 MySQL Repl转载 2020-07-28 20:01:23 · 967 阅读 · 0 评论 -
Mysql事务的隔离级别
脏读 不可重复读 幻读的解释。脏读:读取了其他事务未提交的数据不可重复度:不可重复读是指A事务读取了B事务已经提交的更改数据:幻读:A事务读取B事务提交的新增数据,这时A事务将出现幻读的问题读未提交:一个事务可以读取另一个未提交事务的数据,对于数据就是不加锁读已提交:就是一个事务要等另一个事务提交后才能读取数据。设置只能读别的事务提交后的数据。可重复读:就是在开始读取数据(事务开启)时,不再允许修改操作,会无视别的事务的更新操作,但会收到新增或删除操作影响串行化:串行化执行,很容易理解,我在.原创 2020-07-28 15:08:02 · 100 阅读 · 0 评论 -
数据库表创建必须遵循的范式
先要声明。如果你的的表已经符合BCNF了就已经完全满足规范了什么是”范式(NF)”按照教材中的定义,范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。很晦涩吧?实际上你可以把它粗略地理解为一张数据表的表结构所符合的某种设计标准的级别。就像家里装修买建材,最环保的是E0级,其次是E1级,还有E2级等等。数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5NF。一般在我们设计关系型数据库的时候,最多考虑到BCNF就够。符合高一级范式的设计,必定符合低一级范式,例原创 2020-07-28 14:24:51 · 579 阅读 · 0 评论 -
数据同步
数据同步:当数据源发生改变时,其他相关数据也跟着发展变化。根据需求不同可采取以下方案。1.触发器在数据库建立增删改的触发器。触发器将变更放到一张临时表里。oracle同步cdc优点:实时同步缺点:影响到业务系统,因为需要在业务系统建立触发器2.日志通过分析源数据库日志,来获得源数据库中的变化的数据。oracle异步cdc优点:不影响业务系统缺点:有一定得延时,对于没有提供日志分析接口的数据源,开发的难度比较大3.时间戳在要同步的源表里有时间戳字段,每当数据发生变化,时间戳会记录发生变化的转载 2020-07-28 11:47:24 · 174 阅读 · 0 评论 -
mysql基础语法
注:表名和列名尽量避免使用MySQL关键字一、常用SQL语句1.DDL语句create, alter, drop# 创建数据库create database e_mall;# 删除数据库drop database e_mall;# 创建表create table if not exists `product_order`(`id` bigint(20) unsigned auto_increment,`product_id` bigint(20) unsigned not null转载 2020-07-28 10:11:01 · 231 阅读 · 0 评论 -
Mysql底层是如何处理事务的
要了解MySQL数据库中的性能问题,就首先要搞清楚在客户端向MySQL数据库提交一个事务操作时后者到底做了些什么事情,以及主要是怎么做的。本节所描述的工作过程主要围绕InnoDB数据库引擎进行:上图中笔者只画出了InnoDB数据库引擎在insert/update一个事务的过程中所涉及的重要工作区域,InnoDB的实际工作细节要比上图所示的步骤复杂得多。上文已经说到InnoDB数据库引擎是一个支持事务的数据库引擎,那么如何解决异常崩溃情况下的数据一致性问题就是它的设计中最重要的任务之一。InnoDB数据库引转载 2020-07-28 08:44:24 · 305 阅读 · 0 评论 -
SQL执行计划
为了帮助开发人员根据数据表中现有索引情况,了解自己编写的SQL的执行过程、优化SQL结构,MySQL提供了一套分析功能叫做SQL执行计划(explain)。下面我们就为大家介绍一下执行计划功能的使用。执行计划基本使用简单实例先我们给出几个执行计划的具体案例,这里使用的数据表还是上一篇文章中展示各种示例所使用的数据表。为了便于读者查看,这里再一次给出数据表的结构:# 我们所示例的数据表和SQL语句均是工作在InnoDB数据库引擎下# myuser数据表一共有4个字段,3个索引。# user_nam转载 2020-07-27 21:10:37 · 3427 阅读 · 0 评论 -
Mysql如何避免死锁
这里为各位读者介绍一些在InnoDB引擎使用过程中减少死锁的建议。正确使用读操作语句经过之前文章介绍,我们知道一般的快照读是不会给数据表任何锁的。那么这些快照读操作也就不涉及到参与任何锁等待的情况。那么对于类似insert…select这样需要做当前读操作的语句(但又不是必须进行当前读的操作),笔者的建议是尽可能避免使用它们,如果非要进行也最好放到数据库操作的非高峰期进行(例如晚间)。基于索引进行写操作,避免基于表扫描(聚集索引扫描)进行写操作基于索引进行写操作的目的是保证一个写操作性质的事务中,被转载 2020-07-27 20:43:46 · 823 阅读 · 1 评论 -
Mysql中的死锁
死锁一旦构成死锁,InnoDB会尽可能的帮助开发者解除死锁。其做法是自动终止一些事务的运行从而释放锁定状态。在上一小节我们示范的多个加锁场景,它们虽然都构成锁等待,但是都没有构成死锁。那么本文就要首先说明一下,什么样的情况才构成死锁。什么是死锁两个或者多个事务相互等待对方已锁定的资源,而彼此都不为协助对方达成操作目而主动释放已锁定的资源,这样的情况就称为死锁。请区分正常的锁等待和死锁的区别,例如以下示意图中的锁等待并不构成死锁:上图中的情况只能称为锁资源等待,这是因为当A事务完成处理后就会释放所占转载 2020-07-27 20:36:54 · 247 阅读 · 0 评论 -
上锁过程实例
**nnoDB引擎中的锁机制基于索引才能工作。对数据进行锁定时并不是真的锁定数据本身,而是对数据涉及的聚集索引和非聚集索引进行锁定。**在之前的文章中我们已经介绍到,InnoDB引擎中的索引按照B+树的结构进行组织,那么加锁的过程很明显就是在对应的B+树上进行加锁位置检索和进行标记的过程。并且InnoDB引擎中的非聚簇索引最终都要依靠聚簇索引才能找到具体的数据记录位置,所以加锁的过程都涉及到对聚簇索引进行操作。SELECT关键字的查询操作一般情况下都不会涉及到锁的问题(这种类型的读操作称为快照读),但并不转载 2020-07-27 20:30:51 · 382 阅读 · 0 评论 -
InnoDB中的锁
虽然锁机制是InnoDB引擎中为了保证事务性而自然存在的,在索引、表结构、配置参数一定的前提下,InnoDB引擎加锁过程是一样的,所以理论上来说也就不存在锁机制能够提升性能”这样的说法。但如果技术人员不理解InnoDB中的锁机制或者混乱、错误的索引定义和同样混乱的SQL写操作语句共同作用,那么导致死锁出现的可能性就越大,需要InnoDB进行死锁检测的情况就越多,最终导致不必要的性能浪费甚至事务执行失败。所以理解InnoDB引擎中的锁机制可以帮助我们在高并发系统中尽可能不让锁和死锁成为数据库服务的一个性能瓶颈原创 2020-07-27 20:16:43 · 155 阅读 · 0 评论 -
Mysql中的Query Cache
Query Cache为了加快查询语句的执行性能,从MySQL早期的版本开始就提供了一种名叫Query Cache的缓存技术。这个缓存技术和技术人员使用哪种数据库引擎无关,它完全独立工作于各种数据库引擎的上层,并使用独立的内存区域。Query Cache的工作原理描述起来也比较简单,当某一个客户端连接(session)进行SQL查询并得到返回信息时,MySQL数据库除了将查询结果返回给客户端外,还在特定的内存区域缓存这条SQL查询语句的结果,以便包括这个客户端在内的所有客户的再次执行相同查询请求时,My原创 2020-07-27 19:45:17 · 2208 阅读 · 0 评论 -
Mysql数据库引擎
数据库引擎的选择MySQL数据库中最重要的一个概念就是数据库引擎,不同的数据库引擎的工作原理存在很大差异最终造成MySQL数据库服务的性能差异。例如如果数据库引擎需要支持事务,就必须满足事务的基本特性——AICD特性(AICD:原子性、隔离性、一致性和永久性。属于基础知识所以不在这里赘述),那么自然就需要一定处理机制来实现这些特性。这样做的现实效果就是导致写入同样数据量的情况下,支持事务的数据库引擎比不支持事务的数据库引擎耗费更多的时间。这里我们首先为读者列举MySQL数据库社区版中支持的数据库引擎(部分原创 2020-07-27 19:37:10 · 78 阅读 · 0 评论 -
InnoDB中的索引类型
InnoDB数据引擎使用B+树构造索引结构,其中的索引类型依据参与检索的字段不同可以分为主索引和非主索引;依据B+树叶子节点上真实数据的组织情况又可以分为聚族索引和非聚族索引。每一个索引B+树结构都会有一个独立的存储区域来存放,并且在需要进行检索时将这个结构加载到内存区域。真实情况是InnoDB引擎会加载索引B+树结构到内存的Buffer Pool区域。聚簇索引(聚集索引)聚簇索引指的是这样的数据组织结构:索引B+树的每个叶子节点直接对应了真实的Data Page。并且B+树所有的叶子节点在最底层共同描原创 2020-07-27 19:33:54 · 3091 阅读 · 0 评论 -
Mysql中的B树和B+树
B树是一颗平衡的多叉检索树,它具有以下性质:所谓检索树是指这样的树:树中任意非叶子节点A作为根节点的子树,其左子树上节点中的元素值均小于或等于节点A中元素的值;其右子树上节点中的元素值均大于或等于节点A中元素的值。检索树又称为排序树、有序树,如果将检索树降维成表结构则同样可以使用二分查找法进行节点检索,且时间复杂度基本不变。如果不加任何构造限制,那么在树结构中检索元素的时间复杂度可能为O(n)。这显然失去了检索树的意义,如果一颗检索树能够保证树的高度H限制在节点数N的对数阶范围内(H=O(logn)原创 2020-07-27 19:25:24 · 885 阅读 · 0 评论 -
数据库开端
数据库的学习对于工作面试非常重要。由今天开启,预计花费10天达到中级水平,这篇博客不仅是这个系列的开端,还是其他质量好的数据库文章进行记录,方便大家学习数据库Mysql集群系统存储...原创 2020-07-27 16:52:33 · 119 阅读 · 0 评论