SQL Select 语句完整的执行顺序:
1)from 子句组装来自不同数据源的数据;
2)where 子句基于指定的条件对记录行进行筛选;
3)group by 子句将数据划分为多个分组;
4)使用聚集函数进行计算;
5)使用 having 子句筛选分组;
6)计算所有的表达式
from --where-- group by-- having --select-- order by
having 和where 都是用来筛选用的,having 是筛选组 而where是筛选记录
select 部门编号,count(*) from 员工信息表 where 工资>=2000 group by 部门编号 having count(*)>1
mysql常见的数据库引擎有MYISAM、INNODB
在数据库中查看引擎使用sql命令
show engines;
MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。
MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据
InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含where条件时,两种表的操作是一样的
MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大
MyISAM适合:
(1)做很多count 的计算;
(2)插入不频繁,查询非常频繁;
(3)没有事务。
InnoDB适合:
(1)可靠性要求比较高,或者要求事务;
(2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况指定数据引擎的创建
select * from table limit m,n
其中m是指记录开始的index,从0开始,表示第一条记录
n是指从第m+1条开始,取n条。
select * from tablename limit 2,4
即取出第3条至第6条,4条记录
mysql> select id,account from lc_user limit 2,2; +----+------------+ | id | account | +----+------------+ | 3 | hongchen | | 4 | wangweiwei | +----+------------+ 2 rows in set
like keyword% 索引有效
like %keyword% 索引失效,也无法使用
解决方案
使用翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全扫描。有效降低消耗值,io值,cpu值这三个指标,尤其是io值的降低
http://www.dewen.org/q/397
第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。
第三范式(3NF)必须先满足第二范式(2NF)。第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
存储过程和函数目的是为了 可重复地 执行操作数据库的sql语句的集合。区别是写法和调用上。
写法上:存储过程的参数列表可以有输入参数、输出参数、可输入输出的参数;
函数的参数列表只有输入参数,并且有return <返回值类型,无长度说明>。
返回值上:
存储过程的返回值,可以有多个值,
函数的返回值,只有一个值。
存储进程 自定义函数
功能强大,限制少 诸多限制,有许多语句不能使用,许多功能不能实现
不能直接引用返回值 可以直接引用返回值
用select语句返回记录集 用表变量返回记录集
create procedure 存储过程名字() ( [in|out|inout] 参数 datatype ) begin MySQL 语句; end;