MySql------基础知识1
一。 SQL 的 select 语句完整的执行顺序
1.from字句组装来自不同数据源
2.where 字句基于指定
3.group by 划分多个分组
4.使用聚集函数进行计算
5、使用 having 子句筛选分组;
6、计算所有的表达式;
7、select 的字段;
8、使用 order by 对结果集进行排序。
二。Sql聚合函数:
几何函数就是对一组值进行计算并且返回 单一的值的函数,经常与select语句中的group by 字句一同使用
a.ava()平均值,空值被忽略
b.count()返回是的是指定组中的项目个数
c.max ()和min()分别是返回最大值和最小值
e.sum()返回指定数据的和,只能是数字列
f. group by():对数据进行分组,对执行完 group by 之后的组进行聚合函数的运算,计算每一组的值。
最后用having去掉不符合条件的组,having子句中的每一个元素必须出现在select列表中(只针对于mysql)
三。SQL之连接查询(左连接和右链接)
外连接:左连接():以左表作为基准进行查询,左表数据会全部显示出来,如果不匹配则显示为 null;
右连接():以右表作为基准进行查询,右表数据会全部显示出来,如果不匹配则显示为 null;
全连接():先以左表进行左外连接,再以右表进行右外连接
内连接:显示表之间有连接匹配的所有行
#左外查询
#SELECT * FROM score s LEFT JOIN student stu ON s.stu_id=stu.id
#右外查询
#SELECT * FROM score s RIGHT JOIN student stu ON s.stu_id=stu.id
#内连接
SELECT * FROM score INNER JOIN student ON score.stu_id=student.id
四。SQL之sql注入
web表单提交时会有恶意Sql语句,没有按照设计者意图执行;
举例:
当执行的 sql 为 select * from user where username = “admin”or “a”=“a”时
,sql 语句恒成立,参数 admin 毫无意义、
防止Sql注入方式
1.预编译语句:SELECT * FROM USER WHERE USERNAME=?
变量用?表示;即使传递参数时为“admin or ‘a’= ‘a’”,也会把这整体当做一个字符创去查询
2.Mbatis 框架中的mapper方式中# 也能很大程度的防止 sql 注入($不行)
五。Mysql性能优化
1)当只要一行数据时使用limit1
(2)选择正确的数据库引擎(MyISAM,InnoDB)每个引擎有利有弊:
MyISAM适用于大量数据库查询(select count(*)这类操作超级快),大量写功能不是很好;
而且Update 一个字段就会锁表。别的进程哪怕是读操作都得等当前修改完成
InnoDB趋势是一个很复杂的存储引擎,对于小应用会很慢,支持行锁,写操作较多会比较优秀(支持事务)
(3)用not exists 代替 not in
(4)对操作符的优化,尽量不采用不利于索引的操作符(in , not in, is null, is not null,<>等)
可以直接添加索引:alter table 表名 add index (字段名);