Mysql-面试
文章平均质量分 95
Mysql-面试
echojson
雄鹰在鸡窝里长大,就会失去飞翔的本领,野狼在羊群里成长,也会爱上羊而丧失狼性。人生的奥妙就在于与人相处。生活的美好则在于送人玫瑰。和聪明的人在一起,你才会更加睿智。和优秀的人在一起,你才会出类拔萃。所以,你是谁并不重要,重要的是,你和谁在一起。
展开
-
mysql 幻读的详解、实例及解决办法
事务隔离级别(tx_isolation)mysql 有四级事务隔离级别 每个级别都有字符或数字编号级别symbol值描述读未提交READ-UNCOMMITTED0存在脏读、不可重复读、幻读的问题读已提交READ-COMMITTED1解决脏读的问题,存在不可重复读、幻读的问题可重复读REPEATABLE-READ2mysql 默认级别,解决脏读、不可重复读的问题,存在幻读的问题。使用 MMVC机制 实现可重复读序列化SERIALIZABLE原创 2021-02-20 16:00:22 · 373 阅读 · 0 评论 -
MySQL详解--锁(三)
InnoDB在不同隔离级别下的一致性读及锁的差异前面讲过,锁和多版本数据是InnoDB实现一致性读和ISO/ANSI SQL92隔离级别的手段,因此,在不同的隔离级别下,InnoDB处理SQL时采用的一致性读策略和需要的锁是不同的。同时,数据恢复和复制机制的特点,也对一些SQL的一致性读策略和锁策略有很大影响。将这些特性归纳成如表20-16所示的内容,以便读者查阅。表20-16 InnoDB存储引擎中不同SQL在不同隔...原创 2020-11-19 15:10:55 · 170 阅读 · 0 评论 -
MySQL详解--锁(二)
InnoDB行锁实现方式InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!在实际应用中,要特别注意InnoDB行锁的这一特性,不然的话,可能导致大量的锁冲突,从而影响并发性能。下面通过一些实际例子来加以说明。(1)在不通过索引条件查询的时候,InnoDB确实使用的是表锁,而不是行锁。在如表20原创 2020-11-19 15:10:19 · 169 阅读 · 0 评论 -
MySQL详解--锁(一)
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。本章我们着重讨论MySQL锁机制的特点,常见的锁问题,以及解决MySQL锁问题的一些方法或建议。MySQL锁概述相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是原创 2020-11-19 15:09:16 · 119 阅读 · 0 评论 -
事务的一致性和原子性
其实我认为一致性是为了使计算机模拟的虚拟世界更加贴近我们的现实世界而提出来的。我们来考虑这样的一个场景:你买一瓶可乐,然后倒了100ml到杯子里面。那么你的杯子里面必然是从原来一滴可乐都没的状态变成装有100ml可乐的状态,而你的可乐瓶子里面必然是少了100ml可乐。这是毋庸置疑的,因为在自然界中,我们必须遵循“质量守恒定律”。我们再考虑一个场景:你上班挤地铁的时候,口袋里装了1000块现金,不料被小偷偷了300块钱。那么你将损失了300,而小偷收入300,这是必然的。在我们的生活中还有很多这样的例子原创 2020-11-19 10:03:37 · 356 阅读 · 0 评论 -
MySQL---DDL语句、DML语句与DCL语句
SQL 分类:SQL 语句主要可以划分为以下 3 个类别。DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete、udpate 和select 等。(增添改查原创 2020-07-15 17:28:17 · 188 阅读 · 0 评论 -
理解MySQL insert into ... select 的锁情况
摘要: 一直以为"insert into tb select * from tbx" 这样的导入操作是会把tbx表给锁住的,在锁期间是不允许任何操作(保证一致性)。看完这篇写的之后,发现tbx表是会被锁住,但这个锁有2种情况,现在逐一进行分析:分析环境:root@127.0.0.1 : test 02:10:40>select @@global.tx_isolation,@@session.tx_isolation;+-----------------------+-----...原创 2020-07-15 17:19:04 · 403 阅读 · 0 评论 -
深入理解乐观锁与悲观锁
在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。无论是悲观锁还是乐观锁,都是人们定义出来的概念,可以认为是一种思想。其实不仅仅是关系型数据库系统中有乐观锁和悲观锁的概念,像memcache、hibernat...原创 2018-03-25 14:21:36 · 103 阅读 · 0 评论 -
数据库负载均衡、读写分离技术
随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天百万级甚至上亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。一、负载均衡技术负载均衡集群是由一组相互独立的计算机系统构成,通过常规网络或专用网络进行连接,由路由器衔接在一起,各节点相互协作、共同负载、均衡压力,对客户端来说,整个群集可以视为一台具有超高原创 2018-03-25 14:11:42 · 249 阅读 · 0 评论 -
分布式系统事务一致性解决方案
开篇在OLTP系统领域,我们在很多业务场景下都会面临事务一致性方面的需求,例如最经典的Bob给Smith转账的案例。传统的企业开发,系统往往是以单体应用形式存在的,也没有横跨多个数据库。我们通常只需借助开发平台中特有数据访问技术和框架(例如Spring、JDBC、ADO.NET),结合关系型数据库自带的事务管理机制来实现事务性的需求。关系型数据库通常具有ACID特性:原子性(Atomicity)、...原创 2018-03-25 14:05:10 · 204 阅读 · 0 评论 -
mysql 数据表读锁机制详解
为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制。一、概述MySQL有三种锁的级别:页级、表级、行级。MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-levellocking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-level locking),也支持表...原创 2018-03-23 19:54:19 · 185 阅读 · 0 评论 -
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式。水平切分数据库:可以降低单台机器的负载,同时最大限度的降低了宕机造成的损失;负载均衡策略:可以降低单台机器的访...原创 2018-03-25 14:04:59 · 3907 阅读 · 0 评论 -
Mysql left join,right join,inner join的效率比较
Mysql left join,right join,inner join的效率比较 一.Join语法概述join 用于多表中字段之间的联系,语法如下:... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditionatable1:左表;table2:右表。J...原创 2018-04-27 15:04:08 · 501 阅读 · 0 评论 -
MYSQL 表连接 ON AND 和ON WHERE 的区别
在使用left join时,on and和on where条件的区别如下: 1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。 2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉,on后的条件用来生成左右表关联的临时表,where后的条件对临时表中的记...原创 2018-04-27 15:36:46 · 1196 阅读 · 0 评论 -
SQl优化
1、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is n...原创 2018-03-25 15:11:38 · 121 阅读 · 0 评论