参数模式:
IN: 该参数可以作为输入,也就是该参数需要调用方 传入值;
OUT: 该参数可以作为输出,也就是该参数可以作为返回值;
INOUT:该参数即可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回??
可以设置结束符号 , 一旦设置以后的sql语句都需要以设置的结束符号结尾
语法: DELIMITER $
这就代表需要以 $ 结束sql语句
1简单的空参存储过程创建;
可以先设置一个 结束符号;
DELIMITER $
Pe C 者
Create PROCEDURE
myp1()
BEGIN
Insert into admin (name,pwd)
Values(
‘
tom
’
,
’
000
’
),Values(
‘
jack,
’
000
’
),Values(
‘
lisa,
’
000
’
),Values(
‘
joon,
’
000
’
),Values(
‘
sam,
’
000
’
)
;
(这里注意 需要以分号结尾,之所以在开头设置 结束符号也是因为这里,如果不设置,怕sql语句执行到这里时,自动结束了 不管下面的部分了)
END
$
如果存储过程只有一条sql语句的时候 BEGIN END 可以不用加;
调用
CALL
myp1()
$
和 java的方法调用类似,调用哪个存储过程,就写哪个存储过程名字
2, 带in 的存储过程
DELIMITER $
Create PROCEDURE myp2(IN
name
char(20),IN
pwd
char(20))
BEGIN
DECLARE result INT DEFAULT 0 ; #声明一个变量 result ,并初始化值为0
Select count(*) INTO result # INTO 赋值
From admin
Where admin.name = name AND admin.pwd = pwd
#这里需要注意 如果参数和字段名相同时需要在字段名前加上表名. 来区分,要不 然条件无效 却不报错
select IF (result>0,’成功’,’失败’);
#sql的if语句,条件语句为true ,输出成功,false输出失败
END $
CAll myp2(
‘
tom
’
,
’
0000
’
) $
-
带out的存储过程
输入一个女神名字,经过一个sql语句得到一个男神名字 赋值给 boyname 最终输出出来
Create PROCEDURE myp3 (IN
beautyname
char(20),out
boyname
char(20))
BEGIN
Select bo.name INTO
boyname
From boys bo
Inner join beauty b on bo.id = b.boyfriend_id
Where b.name =
beautyname;
END $
SET @bName$ 这句甚至可以省略
Call myp3(
‘
小昭
’
,@bName)$
Select @bName$
调用
SET @bName$ myp2 的赋值 可以直接在 BEGIN END语法内进行,有一只可以再BEGIN END 语法外 使用
-
多个out的存储过程
Create PROCEDURE myp3 (IN
beautyname
char(20),out
boyname
char(20),out userCp INT)
BEGIN
Select bo.name,bo.userCp INTO
boyname,userCp
From boys bo
Inner join beauty b on bo.id = b.boyfriend_id
Where b.name =
beautyname;
END $
SET @bName$ 这句甚至可以省略
Call myp3(
‘
小昭
’
,@bName,@userCp)$
Select @bName,@usercp$
在 BEGIN END 里面的可以直接接进行值的重新赋值,比如set a = a*2
如果在外面的话那就需要 加上@ 符号
-
INOUT 模式
Create procedure myp5(INOUT a INT,INOUT b INT)
BEGIN
SET a=a*2;
SET b=b*2;
END $
SET @m=10;
SET @n=20;
Call myp5(@m,@n)$
Select @m,@n
Drop procedure myp1;
删除名为 myp1的存储过程
Show create procedure myp1;
查看存储过程 信息
MySQL DATEDIFF
函数:获取两个日期的时间间隔
函数
创建的语法
Create function 函数名(参数) returns 返回类型
BEGIN
函数体
END
注意:函数体肯定会有return语句,如果没有会报错
如果return语句没有放到函数体最后不会报错但不建议
---------------------------------------------------------------------------------------------------------------------------------
外部连接既包含ON子句又包含WHERE子句时,应当只把表之间的连接条件写在ON子句中,对表中数据的筛选必须写在WHERE子句中。而内部连接的各条件表达式既可以放在ON子句又可以放在WHERE子句中。这是因为对于外部连接,保留表中被ON子句筛除掉的行要被添加回来,在此操作之后才会用WHERE子句去筛选连接结果中的各行。
---------------------------------------------------------------------------------------------------------------------------------