因为以前没有写blog的习惯,之前的mysql知识也就没记录,正好现在又用到mysql的函数,所以就立即记录下吧!
区别
触发器 是在insert update之后执行sql命令,不需要任何参数和返回值
函数和存储过程类似,
区别:
- 一般来说函数都是返回一个值或者表对象,返回多个值最好用存储过程
- 存储过程一般是作为一个独立的部分来执行( EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。
- 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局数据库状态的操作。
查看数据库中的存储过程和函数
show procedure status; //存储过程
show function status; //函数
查看存储过程或函数的创建代码
show create procedure proc_name;
show create function func_name;
查看视图
SELECT * from information_schema.VIEWS //视图
SELECT * from information_schema.TABLES //表
删除自定义方法
drop function isRead
isRead是方法名
自己写的一个demo
目的是查询我的房间在某年某个月份是否已经交过电费,返回结果0/1,
写法有点类似js的function
delimiter $$
CREATE FUNCTION isRead(in_meterTime INT,in_year Varchar(255),in_roomId INT) RETURNS int(1)
BEGIN
DECLARE i INT ;
select count(1) INTO i from (
select distinct id from t_room where id in (select room_table_id from t_electric_meter where dfsjd_code = in_meterTime and year = in_year and deleted = 0 )
)t where id = in_roomId;
RETURN i;
END$$
说明
“DELIMITER $$”语句的作用是将MYSQL的结束符设置为$$,因为MYSQL默认的语句结束符为分号;所以这样设置才不会冲突
- 1、定义变量
DECLARE var_name[,varname]...date_type[DEFAULT VALUE];
var_name为局部变量的名称
。DEFAULT VALUE子句给变量提供一个默认值。值除了可以被声明为一个常数外,还可以被指定为一个表达式。
如果没有DEFAULT子句,初始值为NULL
DECLARE MYPARAM INT DEFAULT 100;
- 2、为变量赋值
定义变量之后,为变量赋值可以改变变量的默认值,MYSQL中使用SET语句为变量赋值
SET var_name=expr[,var_name=expr]...
声明3个变量,分别为var1,var2和var3
DECLARE var1,var2,var3 INT;
SET var1=10,var2=20;
SET var3=var1+var2;
MYSQL中还可以通过SELECT...INTO为一个或多个变量赋值(我的例子中就是用的这个)
eg:
DECLARE NAME CHAR(50);
DECLARE id DECIMAL(8,2);
SELECT id,NAME INTO id ,NAME FROM t3 WHERE id=2;