
MySQL
文章平均质量分 81
UFO___
也不要小看悟能
展开
-
MySQL系列-查询语句
先准备两张表:tb1tb21.查询所有字段select * from tb1;2.查询指定的列select id from tb1;3.给表取别名 select id from tb1 t1; 或者 select id from tb1 as t1;4.给列取别名select id as ip from tb2 as t1 where t1.id=1;在sql语句里面要t1.id获取id这一列,但...原创 2018-06-11 22:50:28 · 486 阅读 · 0 评论 -
MySQL系列-优化之再谈索引及explain简介
1.再谈索引前面我出了一篇关于索引的博客MySQL系列-B+Tree索引详解,索引太重要了可以多谈谈,简单来说索引是排好序的快速查找的数据结构。一般来说一张表建立的索引不要超过5个,数据规模没有达到百万级别,建不建索引也没太大区别。2.索引的优势索引具备两个优势一 、可以快速查找二、他已经按建立索引的字段排好序了。3.索引的劣势一、索引也是存储在磁盘中的,需要占的空间比...原创 2018-07-04 23:39:06 · 423 阅读 · 0 评论 -
MySQL系列-优化之like关键字
like关键字我们也是经常使用,用来模糊查询用户名,那么like如何进行优化呢?这篇博客就简单讨论一下like的优化,但是真实的生产环境要比这复杂多了。1.%号不放最左边先创建表和索引。然后进行查询【explain select * from tb where name like 'e%';】可以看到我们的查询使用上了idx_name这个索引,因为我们的 'e%' 规定了只...原创 2018-07-23 11:55:17 · 15369 阅读 · 4 评论 -
MySQL系列-优化之count()
1.count()函数的作用count()函数有两个作用,一是统计表数据的行数,二是统计某列非空值得数量。我们用count(*)来统计行数,当然这个*可以是任意的常量,比如 1 'x' 666 之类的。count(row)用来统计某列非空值得数量,这个row是列名。2.count(1)会比count(*)快吗?答案是不会,起码在我的mysql5.5上是这样的。【当MyS...原创 2018-07-24 09:40:52 · 1232 阅读 · 0 评论 -
MySQL系列-优化之explain执行计划详解
1.id介绍这个id不是主键的意思,他是用来标识select查询的序列号,包含一组数字,表示查询中执行select子句或者操作表的顺序。会出现以下情况:id相同:按从上到下顺序执行id不同:id值越大,优先级越高,越先被执行id相同不同的同时存在:优先执行id值大的,如果id值相同,则按从上到下的顺序执行id为null表示是用来合并结果集的,在sql使用union关键字合并...原创 2018-07-07 17:37:42 · 6568 阅读 · 5 评论 -
MySQL系列-优化之精准解读in和exists
1.解读in和exists这两个关键字的区别主要是在于子查询上面,in是独立子查询,exists是相关子查询,例如:用in查询有员工的部门 :select dept_name from dept where id in (select dept_id from emp);用exists查询有员工的部门:select dept_name from dept where exi...原创 2018-07-26 17:42:02 · 1662 阅读 · 0 评论 -
MySQL系列-优化之join多表连接
1.先看一个单表案例有如下下数据表,只有主键id执行sql【explain select id,n1 from tb where n2='f' and n4>'c' order by n3 desc limit 1;】通过explain分析:不光是ALL全表扫描,而且还产生了一次内部排序using filesort,效率及其底下。那么如何建立索引呢?首先n2这个字...原创 2018-07-30 10:22:55 · 7117 阅读 · 0 评论 -
MySQL系列-优化之分页查询
1.分页查询之前先按索引排序我们经常会上一些小说网站看小说,他们总是会把最近更新了的小说放在最前面,也就是第一页,而很久没更新的就放在后面了。那么这样网站是如何实现的呢?我的猜想有一张小说表,表里面一个last_update表示最后更新字段,并且对这个字段建立了索引,按last_update从大到小排序之后再按需求的页面大小进行分页。那为什么分页查询总是要排序呢?由上面的例子可以看出,...原创 2018-07-30 15:26:33 · 1075 阅读 · 0 评论 -
MySQL系列-优化之查询索引优化
这篇博客我们来谈谈如何正确使用索引以及正确建立索引,当然在开发当中情况比这个复杂多了,还要根据业务实际情况来,这篇博客就只能算是入门了,要想继续进阶的话可以和公司的DBA混个两年,前提是他愿意要带你玩。话不多说,进入正题。如果不了解explain执行计划可以看我之前的文章MySQL系列-优化之explain执行计划详解说明:我使用的是mysq5.5,windows10操作系统。可能实验测试...原创 2018-07-22 22:27:23 · 541 阅读 · 0 评论 -
MySQL系列-优化之覆盖索引
1.什么是覆盖索引我们知道MySQL的B+Tree索引是用我们字段的数据来建立索引的,比如说我们的主键id字段,就是用所有的id来组织这颗索引树,如果我们再对name字段建立索引的话,这个二级索引就是用name字段的数据来组织这颗索引树。那么问题就来了,我们知道对于二级索引而言他的叶子节点存储了对应数据行的id(MySQL系列-B+Tree索引详解),也就是说最后我们的查询还是要通过主键id来...原创 2018-07-23 10:22:42 · 4625 阅读 · 4 评论 -
MySQL系列-innoDB行锁详解
一直都很想讨论一下innoDB的行锁,但是看到了何登成大神的博客之后发现他的研究更深入说的更好,是一篇非常优秀的博客,但是需要对索引有比较深入的了解,因此看他的博客之前可以先看看我的一篇关于索引的文章MySQL系列-B+Tree索引详解。同时也深感数据库易学难精,一条SQL下去可能发生了很多你不知道的细节,要想学的很透彻靠博客和书籍是不够的,还是得直接阅读源码,这是一个非常漫长的路。下面是大神的博...原创 2018-07-01 21:28:17 · 1111 阅读 · 1 评论 -
MySQL系列-事务及乐观锁悲观锁
以下我们针对innoDB存储引擎进行分析,作为MySQL的默认存储引擎,innoDB越来越重要了。1.什么是事务数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全执行,要么完全地不执行。比如说简单的转账事务包含两个SQL语句,一条是给转账人减钱,另一条是给被转账人加钱,这俩条SQL要么都执行,要么读不执行,不允许中间因为停电或者出...原创 2018-07-01 00:40:26 · 5378 阅读 · 1 评论 -
MySQL系列-系统架构及存储引擎介绍
1.什么是MySQL?MySQL是一款性能高、成本低、可靠性好的最流行的开源数据库,被各大互联网公司使用,目前MySQL属于Oracle公司。同时MySQL也迎来了目前为止的最大版本更新MySQL8.0,就像Java8一样,MySQL直接从5.7跳到8.0了,同时也意味着这是一次革命性的版本。2.MySQL的架构图这是MySQL的基本架构图,其实很多架构都是相通的,这个就非常类似于MVC的架构,做...原创 2018-05-31 10:41:32 · 491 阅读 · 0 评论 -
MySQL系列-B+Tree索引详解
1.什么是B+Tree?介绍B+Tree前我们先聊一下在数据结构课程当中学习到的其他树结构,二叉搜索树,平衡二叉树搜索树(红黑树、AVL树),不懂的同学可以先去了解一下。我们知道平衡二查搜索树是对二叉搜索树的一次改进,防止退化成线性表和树高度过高的情况,使其搜索单个值的复杂度为O(logN),这也就意味着在数据必须是可排序的,同时这也是Java的TreeMap(使用的是红黑树结构)不能存null值...原创 2018-05-31 21:41:13 · 2696 阅读 · 1 评论 -
MySQL系列-常用数据类型
1.MySQL常用数据类型分类日期类型 数字类型(整数和小数) 字符类型 二进制类型2.日期类型MySQL数据类型字节数含义date3字节日期,格式:2014-09-18time3字节时间,格式:08:42:30datetime8字节日期时间,格式:2014-09-18 08:42:30timestamp4字节 格式和datetime一样但是它可以根据mysql设置的时区自动修改year1字节年份...原创 2018-06-08 01:18:11 · 526 阅读 · 0 评论 -
MySQL系列-正确使用原生JDBC
一般我们也很少原生JDBC,都是在ORM框架上做二次开发,确实框架帮我们做了很多事情,但是原生JDBC我们还是需要掌握的,网上很多代码为了省事写的很不规范,很容易误导第一次接触的人JDBC的人,接下来我详细解释一下使用原生JDBC的每个步骤,以及规范的编写代码,以MySQL为例。主要分为以下六个步骤:1.加载数据库驱动2.根据配置的信息(用户、密码等等)获取链接3.根据链接获取向数据库发送SQL语...原创 2018-06-08 14:45:10 · 770 阅读 · 0 评论 -
MySQL系列-查询语句练习题
先准备4张表:学生表老师表课程表成绩表1.查询选修课程'8105'且成绩在80到90之间的所有记录解析:简单题答案:select * from sc where cno='8105' and grade <=90 and grade >=80;2.查询成绩为79、89、或99的记录解析:简单题答案:2. select * from sc where grade in('79','89'...原创 2018-06-15 22:03:45 · 3320 阅读 · 0 评论 -
MySQL系列-MyISAM表锁详解
1.S锁和X锁S锁(共享锁)又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改,除非先获取A的X锁。X锁(排他锁)又称写锁,若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T...原创 2018-06-24 23:33:02 · 3109 阅读 · 1 评论 -
MySQL系列-使用JDBC操作MySQL常用数据类型
MySQL常用数据类型有这些 MySQL系列-常用数据类型1.插入和获取日期类型表的设计如下表中数据如下:如何从结果集中获取这些类型的数据呢?第一个date类型,我们可以使用getDate()方法获取。例如:Date d = resultSet.getDate(1);//返回 java.sql.Date 但是 java.sql.Date extends java.util.Date打印结果为201...原创 2018-06-10 11:31:38 · 965 阅读 · 0 评论 -
MySQL系列-详解DDL语句
DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。下面具体介绍各种常用DDL语句:1.数据库级别显示所有数据库:show databases;进入某个数据库:use db_name;创建一个数据库:create databse db_na...原创 2018-06-10 20:55:47 · 2592 阅读 · 0 评论 -
Spring动态数据源与运行时动态添加数据源
1、多数据源与动态数据源当项目不只是要用到一个数据库的时候就需要使用到多个数据源了,这种场景很多,比如要查找的数据不在同一个数据库库中,或者是要做数据库读写分离。应对上面的问题主要有两种解决方法。第一种:在Spring中注入多个DataSource,然后根据不同的DataSource生成不同的SqlSessionFactory,把要操作不同数据库的mapper接口放在不同的包下,并且使用M...原创 2019-08-05 11:34:36 · 7171 阅读 · 9 评论