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面试
- 算数操做符:+ 、-、*、/、DIV(整除)
- 数学函数:
-
- ABS(X):X的绝对值
- CEIL(X):返回不小于X的最小整数值
- FLOOR:返回不大于X的最大整数值
3.字符类型处理函数sql
-
- 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目前仅支持前导列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(索引列),那么能够进行直接定位。
一、数据库的大小写敏感须要设置,包括字段、字段值、数据表、数据库等