一、谈如何解决SQL注入攻击及MyBatis处理方案
1.SQL注入,是指通过字符串拼接的方式构成了一种特殊的查询语句
2.解决方案
总结一句话:采用预处理对象PreparedStatement
3.延伸
二、谈谈数据库设计的三大范式及反范式
1,数据库的三大范式
第一范式:列不可分
第二范式:要有主键
第三范式:不可存在传递依赖
比如商品表里面关联商品类别表,那么只需要一个关联字段product_type_id即可,其他字段信息可以通过表关联查询即可得到
如果商品表还存在一个商品类别名称字段,如product_type_name,那就属于存在传递依赖的情况,第三范式主要是从空间的角度来考虑,避免产生冗余信息,浪费磁盘空间。
2,反范式设计:(第三范式)
为什么会有反范式设计?
原因一:提高查询效率(读多写少)
比如上述的描述中,显示商品信息时,经常需要伴随商品类别信息的展示,
所以这个时候,为了提高查询效率,可以通过冗余一个商品名称字段,这个可以将原先的表关联查询转换为单表查询
原因二:保存历史快照信息
比如订单表,里面需要包含收货人的各项信息,如姓名,电话,地址等等,这些都属于历史快照,需要冗余保存起来,
不能通过保存用户地址ID去关联查询,因为用户的收货人信息可能会在后期发生变更。
三、必会的五大聚合函数
AVG() :只适用于数值类型的字段或变量。不包含NULL值
SUM() :只适用于数值类型的字段或变量。不包含NULL值
MAX() :适用于数值类型、字符串类型、日期时间类型的字段(或变量)不包含NULL值
MIN() :适用于数值类型、字符串类型、日期时间类型的字段(或变量)不包含NULL值
COUNT() :计算指定字段在查询结构中出现的个数(不包含NULL值)
基本语法使用:
select min(age) from t_student
聚合函数经常会结合分组查询,出现在众多的SQL笔试题中,对于众多的SQL笔试题唯有多练