Mysql
文章平均质量分 78
分享mysql 相关技术
Java杨永杰
Java架构师,想要学习的技术点可以在评论区哦,会更新文章的~
展开
-
mysql-的加锁情况
创建表t,没有索引和主键,并插入测试数据手动开启事务,执行语句并采用for update方式(当前读)从返回的信息中,可以看到对表添加了IX锁和4个记录锁,表中的三行记录上分别添加了Next-key Lock锁,防止有数据变化发生幻读,例如进行了更新、删除操作。同时会出现“ 0: len 8;;”这样的描述信息,此操作也是为了防止幻读,会将最大索引值之后的间隙锁住并用supremum表示高于表中任何一个索引的值。同表下,如果加上where条件之后,是否会产生Next-key Lock呢?原创 2024-01-27 18:46:21 · 965 阅读 · 0 评论 -
Mysql面试题
ACID: 原子性:undo log(MVCC) 一致性: 最核心和最本质的要求 隔离性:锁,mvcc(多版本并发控制) 持久性:redo log 数据库的事务隔离级别有四种,分别是读未提交、读已提交、可重复读、序列化,不同的隔离级别下会产生脏读、幻读、不可重复读等相关问题,因此在选择隔离级别的时候要根据应用场景来决定,使用合适的隔离级别。事务隔离机制的实现基于锁机制和并发调度。原创 2024-01-27 17:11:48 · 490 阅读 · 0 评论 -
Mysql-GROUP_CONCAT函数
GROUP_CONCAT函数是MySQL中的聚合函数,用于将多行数据按指定的顺序连接成一个字符串。它可以在SELECT语句中搭配GROUP BY子句使用,将分组后的数据连接成一个字符串,并返回给查询结果。原创 2023-12-26 13:25:07 · 937 阅读 · 0 评论 -
Mysql-druid连接池
Mysql-druid是一个用于连接和管理MySQL数据库的开源项目。它提供了一种简化和优化MySQL数据库访问的方式,以提高性能和可靠性。原创 2023-12-24 13:09:54 · 1025 阅读 · 0 评论 -
MySQL索引失效的几种情况
更准确的说,单列索引不存储null值,复合索引不存储全为null的值。如果是这样的条件where code like 'A % ',就可以查找CODE中A开头的CODE的位置,当碰到B开头的。显然,如果值的差异性大,并且以等值查找(=、 <、>、in)为主,Hash索引是更高效的选择,它有O(1)的查找复杂度。模糊的,所以不能利用索引的顺序,必须一个个去找,看是否满足条件。如果值的差异性相对较差,并且以范围查找为主,B树是更好的选择,它支持范围查找。没Null值,不能利用到索引,只能全表扫描。原创 2023-12-16 07:24:33 · 358 阅读 · 0 评论 -
MySQL存储引擎之Myisam和Innodb对比
通过上述的分析,基本上可以考虑使用InnoDB来替代MyISAM引擎了,原因是InnoDB自身很多良好的特点,比如事务支持、存储 过程、视图、行级锁定等等,在并发很多的情况下,相信InnoDB的表现肯定要比MyISAM强很多。.frm文件存储表定义。MyISAM:只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。InnoDB的主键范围更大,最大是MyISAM的2倍。原创 2023-12-16 07:18:46 · 831 阅读 · 0 评论 -
Mysql约束
MySQL约束是用来保护数据库中的数据完整性的。它们确保数据库中的数据满足特定的条件或规则。下面是一些常见的MySQL约束类型。原创 2023-12-12 20:03:39 · 785 阅读 · 0 评论 -
Mysql-语法分类(DDL、DML、DQL、DCL)
数据定义语言。原创 2023-12-12 12:04:37 · 989 阅读 · 0 评论 -
Mysql索引分类
🌺🎉⭐📢🔍👍。原创 2023-12-12 11:30:33 · 1046 阅读 · 0 评论 -
Mysql 索引结构-Hash、B-Tree、B+Tree介绍
🌺🎉⭐📢🔍👍。原创 2023-12-12 11:24:28 · 1345 阅读 · 0 评论 -
Mysql数据类型+DCL权限
MySQL 数据类型是指在 MySQL 中使用的数据类型,用于定义列的数据类型,以便 MySQL 可以有效地存储和检索数据。原创 2023-12-11 18:15:48 · 860 阅读 · 0 评论 -
Mysql 事务
MySQL事务是指一组原子性、一致性、隔离性和持久性的操作。这些操作被视为一个逻辑单元,要么全部执行,要么全部返回。如果其中任何一个操作失败,则事务必须回滚并撤消所有已执行的操作。原创 2023-12-11 17:44:20 · 801 阅读 · 0 评论 -
SQL 优化
SQL 优化是指通过修改 SQL 查询语句、数据库结构或配置等方式,从而提高 SQL 查询性能和效率的过程。插入数据。原创 2023-12-05 06:30:00 · 785 阅读 · 0 评论 -
Mysql幻读怎么解决的
MySQL幻读是指在同一事务中,对于某个表的查询操作返回了多个不同的结果集,这些结果集是由其他事务提交的插入、更新或删除操作引起的。与脏读和不可重复读不同,幻读是因为其他事务插入了新的行而引起的,而不是修改了已有的行。例如,假设事务1在某个表中查询所有年龄大于30岁的用户,然后事务2在同样的表中插入了一些符合条件的用户数据,接着事务1再次查询符合条件的用户,结果集中会出现新插入的符合条件的用户数据,这就是幻读。原创 2023-12-03 14:56:25 · 863 阅读 · 0 评论 -
Mysql之 join原理?
在 MySQL 中,JOIN 是一种将两个或更多表中的行连接起来的方法。JOIN 的原理是根据表之间的共同列(通常是主键和外键)创建一个临时表,然后将相应的行连接到该表中。具体来说,有以下几种 JOIN 类型:INNER JOIN:返回两个表中共同匹配的行。LEFT JOIN:返回左侧表中所有行和右侧表中匹配的行。RIGHT JOIN:返回右侧表中所有行和左侧表中匹配的行。FULL OUTER JOIN:返回左侧表和右侧表中所有行,无论是否匹配。原创 2023-12-03 12:35:24 · 861 阅读 · 0 评论 -
Mysql事务隔离级别
MySQL的事务隔离级别包括以下四种:READ UNCOMMITTED(读未提交):允许事务读取未被提交的数据。这种隔离级别会导致脏读、不可重复读和幻读等问题。READ COMMITTED(读已提交):只允许事务读取已经提交的数据。这种隔离级别可以避免脏读问题,但可能仍会出现不可重复读和幻读问题。REPEATABLE READ(可重复读):保证在同一事务中多次读取同一数据时,返回的结果始终相同。这种隔离级别能够避免脏读和不可重复读问题,但有可能出现幻读问题。原创 2023-12-03 11:45:50 · 429 阅读 · 0 评论 -
Mysql之MVCC多版本并发控制
数据库并发场景有三种,分别为:MVCC是一种用来解决读写冲突的无锁并发控制,也就是为事务分配单项增长的时间戳,为每个修改保存一个版本,版本与事务时间戳关联,读操作只读该事务开始前的数据库的快照,所以MVCC可以为数据库解决一下问题:mvcc的实现原理主要依赖于记录中的三个隐藏字段,undolog,read view来实现的。记录如图所示:在上图中,DB_ROW_ID是数据库默认为该行记录生成的唯一隐式主键,DB_TRX_ID是当前操作该记录的事务ID,DB_ROLL_PTR是一个回滚指针,原创 2023-12-03 11:41:20 · 895 阅读 · 0 评论 -
Mysql主从同步的实现原理
1、什么是mysql主从同步?当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库。2、主从同步有什么好处?水平扩展数据库的负载能力。容错,高可用。Failover(失败切换)/High Availability数据备份。3、主从同步的原理是什么?首先我们来了解master-slave的体系结构。如下图:不管是delete、update、insert,还是创建函数、存储过程,所有的操作都在master上。原创 2023-12-02 20:16:10 · 912 阅读 · 0 评论 -
Mysql行转列、列转行
行转列和列转行是两种数据转换方式,分别用于将一行数据转换为多列数据或将多列数据转换为一行数据。原创 2023-12-02 17:34:46 · 363 阅读 · 0 评论 -
MySQL索引失效的几种情况
索引不存储null值更准确的说,单列索引不存储null值,复合索引不存储全为null的值。索引不能存储Null,所以对这列采用is null条件时,因为索引上根本没Null值,不能利用到索引,只能全表扫描。原创 2023-12-01 16:14:18 · 812 阅读 · 0 评论 -
Mysql 死锁?如何解决?
MySQL死锁是指多个事务在同时访问相同的数据资源的情况下,发生了互相等待的现象,从而导致所有事务都无法继续执行下去的一种现象。当多个事务同时请求同一资源时,如果每个事务都持有一部分资源并且在等待其他事务持有的资源,则可能会发生死锁。为了避免死锁,MySQL使用锁来控制对共享资源的访问。锁是一种机制,用于确保在任何时候只有一个线程能够访问共享资源。当发生死锁时,MySQL将随机选择一个事务作为死锁“牺牲者”,放弃其请求的资源,从而解除死锁。然后,其他事务将继续执行。原创 2023-12-01 13:19:28 · 412 阅读 · 0 评论 -
Mysql表锁和行锁
MySQL有两种锁机制:表锁和行锁。表锁:锁住整个表,其他线程不能插入、删除、修改表中任何数据。表锁适用于大量写入、少量查询的情况,可以保证数据在修改时的完整性,但会影响并发性能。行锁:锁住某一行,其他线程可以访问表中其他数据,但不能修改被锁定的行。行锁适用于大量查询、少量写入的情况,可以提高并发性能,但同时会增加锁冲突的可能性。在InnoDB存储引擎中,默认采用行锁机制。如果需要使用表锁,可以使用LOCK TABLES命令。原创 2023-12-01 13:11:49 · 388 阅读 · 0 评论 -
Mysql 共享锁和排他锁
MySQL中的共享锁和排他锁是用于控制并发访问数据库的锁定机制。共享锁,也称为读锁,可以允许多个事务同时读取同一个资源,但防止并发修改。即,当一个事务获取了共享锁后,其他事务可以继续获取共享锁,但不能获取排他锁。排他锁,也称为写锁,只允许一个事务在同一时间修改资源,其他事务则无法访问和修改该资源。即,当一个事务获取了排他锁后,其他事务无法获取共享锁和排他锁。共享锁:SELECT ... LOCK IN SHARE MODE;排他锁:SELECT ... FOR UPDATE;原创 2023-12-01 13:06:50 · 868 阅读 · 0 评论 -
Linux安装Mysql
The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid).重新连接后,原来的库由于建立于修改字符集之前,所以中文依然是乱码,而新建表中文不是乱码。/var/lib/mysql:mysql数据库文件的存放路径。查看MySQL安装时创建的mysql用户和mysql组。/etc/init.d/mysql:启停相关脚本。/usr/share/mysql:配置文件目录。/usr/bin:相关命令目录。原创 2023-12-01 13:00:15 · 338 阅读 · 0 评论 -
MySQL的binlog有有几种录入格式?分别有什么区别?
Binlog(二进制日志)是 MySQL 数据库中的一种日志,它记录了数据库中所执行的所有修改操作,包括插入、更新和删除操作。头部信息:Binlog 文件的头部包含了文件的格式版本号、MySQL 服务器的版本号、创建该文件的时间戳、以及其他一些相关信息。事件信息:Binlog 文件中的每个事件都包含了一些关键信息,比如事件类型(插入、更新、删除)、涉及的数据库和数据表名称等。数据信息:对于插入、更新和删除事件,Binlog 文件中还包含了相应的数据信息,包括修改前的数据值和修改后的数据值等。原创 2023-11-30 11:15:06 · 374 阅读 · 0 评论 -
数据库三大范式?反范式?
在数据库反范式设计中,常见的技术包括使用冗余数据来减少关联表之间的连接,以及使用存储过程和触发器来增加数据的完整性和一致性。反范式设计可在一定程度上提高数据库的查询性能和数据更新效率,但也会增加数据冗余和重复,并且可能导致数据不一致性和维护困难等问题。数据库反范式是指针对某些具体应用场景,为了优化数据库的查询性能,而有意忽略规范化范式的设计原则,将数据冗余和重复存储的技术手段,以获得更好的查询性能和数据更新效率。组合数据:将多个表中的数据组合成一个表,减少表之间的关联查询,提高查询性能。原创 2023-11-30 10:44:37 · 362 阅读 · 0 评论 -
Mysql回表
MySQL回表是指在查询操作中,MySQL需要从二级索引中先找到记录的主键值,然后再根据主键值来查找数据行的过程。这个过程就是回表。原创 2023-11-28 13:20:35 · 805 阅读 · 0 评论 -
Mysql中Sql注入问题?
SQL注入即是指应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。使用预编译的 SQL 语句语义不会发生改变,在 SQL 语句中,变量用问号?像上面例子中,pay_no变量传递的"or'a'='a参数,也只会当 作 pay_no 字符串来解释查询,从根本上杜绝了 SQL 注入攻击的发生。原创 2023-11-27 16:12:58 · 351 阅读 · 0 评论 -
Mysql有哪些数据类型
排序是按照内部存储的整数。长度在大多数场景是没有意义的,它不会限制值的合法范围,只会影响显示字符的个数,而且需要和UNSIGNEDZEROFILL属性配合使用才有意义。,包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分别表示1字节、2字节、3字节、4字节、8字节整数。例子,假定类型设定为INT(5),属性为UNSIGNEDZEROFILL,如果用户插入的数据为12的话,那么数据库实际存储数据为00012。列长度小于255字节时,使用1字节表示,否则使用2字节表示。原创 2023-11-26 18:14:48 · 362 阅读 · 0 评论 -
SQL优化 (面试篇)
select id from t where num is null 可以在。操作符,否则将引擎放弃使用索引而进行全表扫描。在确认没有重复数据或者不用剔除重复数据时,、尽量减少子查询,使用关联查询(或者关联查询语句替代。、查询语句中不要使用。原创 2023-11-26 16:33:10 · 339 阅读 · 0 评论 -
数据库的乐观锁和悲观锁是什么? 怎么实现的?
数据库管理系统 (DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。原创 2023-11-26 11:00:32 · 438 阅读 · 0 评论 -
Mysql 超大分页如何优化?分页慢如何优化?(简洁版)
数据库层面,这也是我们主要集中关注的(虽然收效没那么大),类似于 select * from tablewhere age >2 1imit 100800 ,10 这种查询其实也是有可以优化的余地的.官方给我优化方案是:覆盖索引+子查询。原创 2023-11-26 09:10:45 · 510 阅读 · 0 评论 -
Mysql -常见函数
【代码】Mysql -函数。原创 2023-11-17 15:39:50 · 194 阅读 · 0 评论 -
关系型数据库和非关系数据库区别
关系型数据库(Mysql和Oracle)1.表和表、表和字段、数据和数据存在着关系优点:1.数据之间有关系,进行数据的增删改查的时候是非常方便的2.关系型数据库是有事务操作的,保证数据的完整性和一致性。缺点:1.因为数据和数据是有关系的,底层是运行了大量的算法大量算法会降低系统的效率,会降低性能2.面对海量数据的增删改查的时候会显的无能为力3.海量数据对数据进行原创 2017-10-09 09:56:41 · 18257 阅读 · 2 评论 -
Mysql优化-性能分析
查看指定query_id的SQL语句各个阶段的耗时: show profile for query query_id;# 设置慢查询日志的时间为2秒,SQL语句执行时间超过2秒,就会视为慢查询,记录慢查询日志 long_query_time=2 更改后记得重启MySQL服务。慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL 语句的日志。# 开启慢查询日志开关 slow_query_log=1。Com_select: 查询次数。原创 2023-11-21 17:21:27 · 49 阅读 · 0 评论 -
InnoDB和MyISAM对比
在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。InnoDB支持事务,MyISAM不支持InnoDB 是聚集索引,MyISAM 是非聚集索引InnoDB支持外键,MyISAM不支持InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。InnoDB中不保存表的行数,但是MyISAM只要简单的读出保存好的行数即可清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表。原创 2023-11-21 10:01:10 · 57 阅读 · 0 评论 -
Mysql-体系结构
在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定表的查询的顺序,是否利用索引等,最后生成相应的执行操作。主要体现在存储引擎上,插件式的存储引擎架构,将查询处理和其他的系统任务以及数据的存储提取分离。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎。数据库中的索引是在存储引擎层实现的。语句,服务器还会查询内部的缓存,如果缓存空间足够大, 这样在解决大量读操作的环境中能够很好的提升系统的性能。存储引擎层, 存储引擎真正的负责了。接口,并完成缓存的查询,原创 2023-11-16 16:04:10 · 147 阅读 · 0 评论