MySQL一些基本知识
1、介绍mysql分页
使用limit字句
在所有的查询结果只需要返回前五行记录: … limit 5;
在所有查询结果,从第五行开始返回五行记录: … limit 5,5;
总结:带一个值的limit总是从第一行开始,给出的行数为返回的行数,带两个值的limit可以指定从行号为第一个值的位置开始。
优化limit分页可以使用到索引覆盖扫描,而不是查询到所有的列。查询太多数据,返回的数据很少的时候,要么是优化大偏移量的查询,要么是在页面中限制分页的数量。2、
2、介绍SQL中的聚合函数
COUNT()、MAX()、MIN()、SUM()、AVG()
COUNT(*):计算表中的总的行数,不管某列是否有数值或为空值
COUNT(字段名):计算指定下列总的行数,计算时将忽略空值的行
COUNT()可以与GROUP BY()一起使用,计算每个分组的总和
AVG():返回的行数和每一行数据的和,求得指定的列数据的平均值
与GROUP BY()计算每个分组的平均值
SUM():一个求和的函数,返回指定列值的总和
与GROUP BY()计算每个分组的总和
MAX():返回指定列的最大值,与group by一起用是求每个分组的最大值
同理min跟max是一样的道理
3、表与表之间是怎么样关联的
是内连接和外连接
内连接是inner join,返回两个表中所有符合条件的数据,不满足的不会被查询出来
外连接是分为左外连接和右外连接,左外连接是返回左表中的所有记录和右表中满足连接条件的记录。右外连接是以右表为基础,返回右表中所有记录和左边满足条件的记录。
此外,比较常见的关联关系有:一对多,多对多,自关联
MySQL中是不支持完全外连接的
4、行转列
使用case…when…then…
使用if()函数
5、SQL注入的理解
是将SQL代码伪装到输入参数中,传输到服务器解析并执行的一种攻击手法。
6、MySQL索引(INDEX)
索引是一个单纯存储在磁盘上的数据库结构,包含对数据表所有记录的引用指针
可以加快数据的查询速度,加速表与表之间的连接。
如果是增删查改比较频繁的话对索引不利,在进行insert、update、delete的时候会对索引也有更新和调整
7、如何判断索引是否生效
通过explain语句 describe,分析查询语句
比如说explain select * from book where name=“linghuan”;
索引有两个存储引擎,myisam innodb
8、重构索引
1、表中频繁发生update、delete的操作
1、表中发生了alter table…move的操作
怎么判断?
先看倾斜是否严重,是否浪费空间
9、说说对事务的了解
事务的操作中,要么都执行,要么都不执行
a:原子性是指整个事务中不可分割的工作单位,任何一个SQL语句执行失败,已经执行成功的也要撤销,退回到执行之前的状态
c:一致性是从一种状态到另外一种状态。完整性约束没被破坏
i:隔离性是指事务提交前要对别的事务不可见,这通常使用锁来实现
D:持久性是事务一旦提交,结果就是永久的,即使发生宕机也会将数据恢复
10、对MySQL四种隔离级别
读未提交
读已提交
可重复读
串行化
脏读:事务A读到了事务B未提交的数据(脏数据)
不可重复读:在事务A先后两次读取同一个数据,两次读取的结果不一样,这种现象是不可重复读
幻读:在事务A按照某个条件先后两次查询数据库,两次查询的结果条数不同,与不可重复读的差别是前者是数据变了,后者是数据的行数变了
11、锁机制
锁机制是区别于文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问
共享锁:允许事务读一行数据
排它锁:允许事务删除或更新一行数据
12、死锁
是指两个或两个以上的事务在执行过程中,因争夺资源而造成的一种互相等待的现象。
解决办法:超时,当一个等待时间超过设置的阈值的时候,其中一个事务回滚,另外一个等待的事务就能够进行下去
13、介绍数据库的三大范式
第一范式:数据库表每一个都是不可分割的原子数据项,不可重复的域
第二范式:在第一范式的基础上,非码属性必须完全依赖于候选码,消除部分函数依赖
第三范式:在第二范式的基础上,任何非主属性不依赖于其他非主属性,消除传递依赖
14、redo log 、undo log 、binlog的了解
binlog是二进制文件,记录MySQL所有修改数据库的操作,然后以二进制形式存储在日志文件中
redo log:重做日志,实现事务的持久性,由两部分组成,一部分是内存中的重做日志缓存,是易失的;二是重做日志文件,是持久的。基本上是按照顺序写的
undo log:保证事务的持久性,帮助事务回滚以及MVCC(多版本的并发控制协议)。是随机读写的