java开发中的重中之重-------mysql(基础篇)
- 介绍:
mysql是目前世界上最流行的关系型数据库,在国内大的互联网公司都在使用mysql数据库,mysql经常被我们这样概述,“mysql是轻量级关系型数据库”,其实轻量级并不是说mysql是中小型数据库,在项目开发中,存储数据的量往往是一个架构问题,如果配合架构,mysql也是可以存储海量数据的。并且海量数据并没有一个明确的标准。说mysql是轻量级关系型数据库,原因是mysql不擅长对海量数据的分析。在一般的互联网公司海量数据并不常见,因此mysql是中小型公司的最佳选择。
- mysql的查询执行过程:在开发中经常用到mysql进行数据查询,那么mysql的查询执行过程是什么样的呢?
- 首先连接mysql发布查询
- 先去查询缓存中是否有结果集,如果有则直接返回结果集
- 如果没有结果集,那么mysql解析查询将通过优化器生产执行计划,然后运行执行计划通过API从存储引擎获取数据,并返回给客户端
- 存储引擎:下面主要介绍下常用引擎的特性(一共有20多个引擎)
- InnoDB引擎:在mysql5.5版本以后的版本中,InnoDB是mysql的默认引擎,在近几年的版本更新中,InnoDB一直在持续改进,处理能力不断提高,下面看一下InnoDB的优势
- 灾难恢复性好
- 支持全部级别的事物(一共四种事物),其中默认事物隔离级别是可重复读
- 使用行级锁
- 支持外键
- 支持热备份
- MyISAM引擎:
- 无事物支持
- 使用的是表级锁,并发性差
- 主机宕机后,MyISAM表易损坏,灾难恢复性不佳
- 只缓存索引
以上两种索引的注意区别:InnoDB读取数据的速度远远小于MyISAM,但是MyISAM的写入数据远小于InnoDB
- mysql函数:
- 算数操作符:+ 、-、*、/、DIV(整除)
- 数学函数:
- ABS(X):X的绝对值
- CEIL(X):返回不小于X的最小整数值
- FLOOR:返回不大于X的最大整数值
3.字符类型处理函数
- CHAR_LENGTH(str):返回值为字符串str的长度,长度单位为字符
- LENGTH(str):返回值为字符串str的长度,单位为字节
- CONCAT(str1,str2):返回结果是str1和str2拼接产生的字符串
- LEFT(str,len):返回从左边开始len个字符,相反RIGHT(str,len)
- SUBSTRING(str,pos)、SUBSTRING(str,pos,len):pos是起始字符串
- LOWER(str):返回字符串str转化为小写字母的字符,相反UPPER(str)
4.日期格式
- NOW():返回当前日期和时间的值,格式是‘YYYY-MM-DD HH:MM:SS’
- CURTIME():将当前时间以‘HH:MM:SS’的格式返回
- CURDATE():将当前时间以‘YYYY-MM-DD’格式返回
- DATEDIFF(expr1,expr2)返回两个如期之间相隔的天数
- STR_TO_DATE(str,format):String转日期类型
- mysql语法(简单的就不讲了,主要讲一下常用的表连接)
- 等值连接(inner join):也叫内连接,把所有表里出现的数据全部连接起来
- 左连接(left join):左连接就是左表中的所有数据按字段匹配右表中的数据,新表包括左表中的所有字段,如果匹配不到右表中的数据用空表示
- 右连接(right join):右连接与左连接类似,就是右表中的数据按字段匹配左表中的字段,新表包括右表中的所有字段,如果匹配不到左表中的数据用空表示
- 索引(做开发这么长时间,我认为索引在mysql中是比较重要的存在,特别是面试的时候容易被问到)
mysql主要支持的几种索引:B树索引(B-tree)、散列索引(hash)、空间索引(R-tree)、全文索引(full-text)。这里主要讲一下B树索引(B-tree)。下面讲一下索引的场景及注意事项:
- 何种查询可以应用索引
(1)、mysql目前仅支持前导列
筛选记录的条件应能组成复合索引最左边的部分,即按照最左前缀的原则进行筛选,例如:idx_a_b_c,那么只有where时条件必须按照a=? and b=? and c=? 复合索引才有效
(2)、索引列上的范围查找(where ... between ... and ...或者>、<等范围操作时,那么可能用到索引的范围查找。在一般的的操作中,应避免大范围索引范围查找,如果索引范围查找的成本太高,那么数据库可能会选择全表扫描)
(3)、join列:在联合查询a表和b表时,若a为驱动表,那么数据库可能会全表扫描a表,然后用a表的每个id探测b表的索引查找匹配的记录
(4)、where子句:
举例子就一目了然:复合索引idx_a_b_c_d
where a=? and b=? and c>10000; 这种情况可以用到a_b_c复合索引
where a=? and b=? and c>10000 and d<10000; 这种情况d的索引是用不到的
where a>10000 and b=? and c=? and d=?; 这种情况只有a的范围查找,其他bcd的索引是用不到的
(5)、mysql优化器
mysql优化器会做一些特殊优化,比如对于索引查找MAX(索引列),那么可以进行直接定位。
- 持续更新:
1、数据库的大小写敏感需要设置,包括字段、字段值、数据表、数据库等
java开发中的重中之重-------mysql(基础篇)的更多相关文章
- [ 转载 ] Java开发中的23种设计模式详解(转)
Java开发中的23种设计模式详解(转) 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类 ...
- 【目录】mysql 基础篇系列
随笔分类 - mysql 基础篇系列 mysql 开发基础系列22 SQL Model(带迁移事项) 摘要: 一.概述 与其它数据库不同,mysql 可以运行不同的sql model 下, sql m ...
- 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)
编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...
- 重新整理 mysql 基础篇————— 介绍mysql[一]
前言 准备整理mysql的基础篇了,前面整理了sql语句序列的的<sql 语句系列(八百章)>,感觉很多用不上,就停下来了,后续还是会继续整理. mysql 基础篇主要是对一些基础进行整理 ...
- paip.java 开发中web server的选择jboss resin tomcat比较..
paip.java 开发中web server的选择jboss resin tomcat比较.. 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专 ...
- Java开发中常见的危险信号(中)
本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/12/common-red-flags-in-java-1 Dustin Ma ...
- Java开发中文件读取方式总结
JAVA开发中,免不了要读文件操作,读取文件,首先就需要获取文件的路径. 路径分为绝对路径和相对路径. 在文件系统中,绝对路径都是以盘符开始的,例如C:\abc\1.txt. 什么是相对路径呢?相对路 ...
- java开发中遇到的问题及解决方法(持续更新)
摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他 ...
- Java开发中常见的危险信号(上)
本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/12/common-red-flags-in-java-1 Dustin Ma ...
随机推荐
- Codeforces Round #412 (rated, Div. 2, base on VK Cup 2017 Round 3) D - Dynamic Problem Scoring
地址:http://codeforces.com/contest/807/problem/D 题目: D. Dynamic Problem Scoring time limit per test 2 ...
- HDU - 4725 The Shortest Path in Nya Graph(拆点+Dijkstra)
题意:N个点,每个点有一个层号L,相邻的两层 Li 与 Li+1 之间的距离为C.另外给出M条无向边,求从点1到点N的最短路. 分析:同一层之间的两点距离并不是0,这是一个小坑.依次把相邻两层的所有点 ...
- CCTableView
今天用到TableView, 我就来记录一下....这些都是在网上找到了资料 //首先 继承 : public cocos2d::extension::CCTableViewDelegate,publ ...
- java文件遍历
用java实现本地文件的遍历,顺便了解了下集合框架,注意java中还有Collections,是一个强大的工具,注意其与Collection的区别,在 for(File f: listFiles) 中 ...
- C++——创建类的时候用new与不用new 的区别
转自:https://www.cnblogs.com/tony-li/p/4111588.html C++在创建对象的时候可以采用两种方式:(例如类名为Test) Test test 或者 Test ...
- sift算法特征点如何匹配?
https://www.zhihu.com/question/23371175 我需要把一张照片和训练集中的图片进行匹配.我把一张照片提取特征值并建立kd树,然后把训练集的图片依次读进来,然后把图片的 ...
- linux目录结构及文件权限
安装banner用到的指令: 第一步: sudo apt-get update 第二步: sudo apt-get install sysvbanner 成功了 创建新用户指令: sudo addus ...
- 【读书笔记】《深入浅出nodejs》第五章 内存控制
海量请求+长时间运行 -> 内存控制 -> 一切资源高效循环利用 1. V8的垃圾回收机制与内存限制 在Node中通过JavaScript使用内存时,只能使用部分内存(64位系统下约1.4 ...
- 高手用的SourceInsight配置文件——仿Sublime风格【转】
本文转载自:https://blog.csdn.net/weixin_38233274/article/details/80209100 配置文件下载地址:https://download.csdn. ...
- NOIP2015 T4 推销员 贪心+堆优化
前几天在学堆,这个数据结构貌似挺简单的,但是我看了很久啊QAQ... 今天算是搞懂了吧...于是想到了这道题...(当初悄悄咪咪看题解记得一点) 点我看题 放洛谷的题... 题意的话,大概就是有n个房 ...