distinct 数据库去重
用distinct来返回不重复的用户名:select distinct name from user; (count(distinct id))返回不重复的字段的数量
group by(分组) 数据库不去重
select id,name from user group by name;
数据库索引
数据库索引其实就是为了使查询数据效率快。
聚集索引(主键索引):在数据库里面,所有行数都会按照主键索引进行排序。存在于磁盘。
非聚集索引:就是给普通字段加上索引。存在于磁盘。
联合索引:就是好几个字段组成的索引,称为联合索引
添加索引:
key
'idx_age'
(
'age'
),
key
'idx_name'
(
'name'
)
存储过程
就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能
ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;
有哪些特性
有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能;
函数的普遍特性:模块化,封装,代码复用;
速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;
创建一个简单的存储过程
存储过程proc_adder功能很简单,两个整型输入参数a和b,一个整型输出参数sum,功能就是计算输入参数a和b的结果,赋值给输出参数sum;
存储过程弊端
不同数据库,语法差别很大,移植困难,换了数据库,需要重新编写;
不好管理,把过多业务逻辑写在存储过程不好维护,不利于分层管理,容易混乱,一般存储过程适用于个别对性能要求较高的业务,其它的必要性不是很大;
举例:
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_adder`(IN a int, IN b int, OUT sum int) BEGIN #Routine body goes here... DECLARE c int; if a is null then set a = 0; end if; if b is null then set b = 0; end if; set sum = a + b; END ;; DELIMITER ;