java面试mysql_Java面试题之数据库Mysql

一、Mysql

1、SQL 的Select 语句完整的执行顺序

1、from 子句组装来自不同数据源的数据;

2、where子句基于指定的条件对记录进行筛选;

3、 group by 子句将数据划分为多个分组

4、使用聚集函数进行计算

5、使用having子句筛选分组;

6、计算所有表达式。

7、Select 的字段

8、使用order by 对结果集进行排序

2、SQL之聚合函数

聚合函数是对一组值进行计算并返回单一的值的函数,它经常与Select 语句中的group by 子句一同使用

1.avg()返回的是指定组分钟的平均值,空置被忽略。

2.count():返回指定的是指定组中的项目个数。

3.max()返回指定数据中的最大值

4.min()返回指定数据中的最小值。

5.sum() 返回制定数据的和,只能用于数字序列,控制忽略

3、SQL之连接查询(左连接和右连接的区别)

外连接,

左连接:以左边作为基本进行查询,左表数据会全部显示出来,右表如果和左表匹配的数据则显示相应的字段数据,如果

不匹配则显示为null

右连接:以右表作为基准进行查询,右表数据会全部显示,左表和右表匹配的数据则显示相应的字段的数据,如果不匹配显示为null

全连接:先以左表为进行左连接,在以右表进行右连接

内连接:显示表之间所有连接匹配的所用行

4、SQL值SQL注入

防止SQl注入的方式

1.预编译语句,

2,Mybatis框架中的mapper方式中的#也能很大程度的防止sql注入

5、Mysql性能优化

1)当只有一行数据时使用limit

查询时如果已知会得到一条数据,这种情况下加上limit1会增加性能,因为mysql数据库引擎会在找到一条记录结果

停止搜索,而不是继续查询相爱一条符合标准直到所有记录都查询完毕

2)选择正确的数据库的引擎

Mysql 中有两个数据库引擎MyISAM和InnoDB,每个引擎有利有弊

MyISAM适用于一些大量查询的应用,但对于有大量写功能的应用不是很友好,甚至你只需要update一个字段整个表

都会被锁起来,而别的进程就算是读操作也不行要等到当前update操作完成之后才能继续运行,另外,MyISAM对于

select count(*)这类操作时非常快的

InnoDB的趋势会是一个非常复杂的存储引擎,对于一些小的应用回避MyISAM还慢,但是支持“行锁”,所以在写操作

比较多的时候会比较优秀,并且,它支持很多的高级应用,例如:事务

3).用not exists 代替not  in

NOt exists 用到了连接能够发挥已经建立好的 索引的作用,not in不能使用索引,Not in 是最慢的方式要同每条记录比较。

在数据量比较大的操作不建议使用这种方式。

4)对操作符的优化,尽量不采用不利于索引的操作符

如:in   not in     is  null  is not null   <>等

事务的四大特征是什么

数据库事务transanction 正确执行的四个基本要素,ACID,原子性(Atomicity)、一致性,隔离性,持久性

原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节,事务在执行过程中发生

错误,会被回滚到事务开始前的状态,就像这个事务从来执行过一样。

一致性:在事务开始之前和事务结束以后,数据库的完成性约束没有被破坏

隔离性:隔离状态执行型事务,它们好像是系统在给定时间内执行的唯一操作,如果有两个事物,运行在相同的时间内。

执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统,这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化,

持久性:在事务完成以后,该事务所对数据库所做的更改便持久的保存在数据库之中,并不会被回滚,

limit的基数比较时使用between

例如:    select   *   admin order by admin_id limit 100000,10

优化为:Select   from  admin where admin_id  between 100000 and 1000010 order by admin_id

尽量避免使用在列做运算,这样会导致索引失效

例如:Select   *  from  admin where year(admin_time)>2014

优化为:Select * from admin where admin_time>'2014-01-01'

本人能力有限,也只能理解这些,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值