怎么查询,怎样写sql
在sql 语句中判断不能用 == ,要用 = 就行了 ,赋值 用 :=
函数 和 储存过程的相同点 和不同点:
函数的创建:
函数只能在指定数据库中用。 和存储方法一样
delimiter $$
create function 函数名称(参数列表) returns 返回类型
begin
sql语句
end
$$
delimiter ;
调用:
select 函数名(参数列表)
删除函数:
drop function 函数名称;
储存过程的创建:
delimiter //
create procedure 存储过程名称(参数列表)
begin
sql语句
end
//
delimiter ;
调用时:
call 储存过程名(); --没有参数的话括号可以省去
删除储存过程:
drop procedure 存储过程名称;
相同点
提高了语法的执行效率
* 存储过程和函数都是为了可重复的执行操作数据库的 sql 语句的集合.
* 存储过程和函数都是一次编译,就会被缓存起来,下次使用就直接命中缓存中已经编译好的 sql, 不需要重复编译
* 减少网络交互,减少网络访问流量
不同点
* 标识符不同,函数的标识符是 function, 过程:procedure
* 函数中有返回值,且必须有返回值,而过程没有返回值,但是可以通过设置参数类型(in,out)来实现多个参数或者返回值
* 函数使用 select 调用,存储过程需要使用 call 调用
* select 语句可以在存储过中调用,但是除了 select ... into 之外的 select 语句都不能再函数中调用
* 通过 in out 参数,过程相关函数更加灵活,可以返回多个结果
* 在实际开发中根据个人喜好选择使用函数或者存储过程
查看
* 所有存储过程和函数,都存储在mysql数据库下的proc表中
* 查看表结构
desc mysql.proc\G;
* 主要字段说明:
*
* name表示名称
* type表示类型,为存储过程、函数
* body表示正文脚本
* db表示属于的数据库
* 查看python数据库的所有存储过程
select name,type,body from mysql.proc where db='python';
函数实例:
-- 输出 0 ~ 100 间的偶数
-- 递增某一个值
-- 判断该值是否为偶数
-- 将偶数 拼接成一个字符串 最后返回
delimiter //
create function f3() returns varchar(300)
begin
-- 1. 声明递增的值 i, 拼接结果的 res
declare i int default 0;
declare res varchar(300) default '';
-- 2. 通过 while 递增 i
while i <= 100 do
-- 3. 判断 i 是否是偶数
if i % 2 = 0 then
-- 4. 拼接偶数
set res = concat(res,' ',i);
end if;
-- 递增 i
set i = i + 1;
end while;
-- 5. 返回 res
return res;
end
//
delimiter ;
储存过程实例:
-- 传入一个英雄的 id 删除该英雄,并且返回剩下的英雄总人数
delimiter //
create procedure deleteherobyid_getcount(in hid int unsigned,out rescount int)
begin
delete from mm_users where id = hid;
select count(*) from mm_users into rescount;
end
//
delimiter ;
在sql 语句中判断不能用 == ,要用 = 就行了 ,赋值 用 :=
函数 和 储存过程的相同点 和不同点:
函数的创建:
函数只能在指定数据库中用。 和存储方法一样
delimiter $$
create function 函数名称(参数列表) returns 返回类型
begin
sql语句
end
$$
delimiter ;
调用:
select 函数名(参数列表)
删除函数:
drop function 函数名称;
储存过程的创建:
delimiter //
create procedure 存储过程名称(参数列表)
begin
sql语句
end
//
delimiter ;
调用时:
call 储存过程名(); --没有参数的话括号可以省去
删除储存过程:
drop procedure 存储过程名称;
相同点
提高了语法的执行效率
* 存储过程和函数都是为了可重复的执行操作数据库的 sql 语句的集合.
* 存储过程和函数都是一次编译,就会被缓存起来,下次使用就直接命中缓存中已经编译好的 sql, 不需要重复编译
* 减少网络交互,减少网络访问流量
不同点
* 标识符不同,函数的标识符是 function, 过程:procedure
* 函数中有返回值,且必须有返回值,而过程没有返回值,但是可以通过设置参数类型(in,out)来实现多个参数或者返回值
* 函数使用 select 调用,存储过程需要使用 call 调用
* select 语句可以在存储过中调用,但是除了 select ... into 之外的 select 语句都不能再函数中调用
* 通过 in out 参数,过程相关函数更加灵活,可以返回多个结果
* 在实际开发中根据个人喜好选择使用函数或者存储过程
查看
* 所有存储过程和函数,都存储在mysql数据库下的proc表中
* 查看表结构
desc mysql.proc\G;
* 主要字段说明:
*
* name表示名称
* type表示类型,为存储过程、函数
* body表示正文脚本
* db表示属于的数据库
* 查看python数据库的所有存储过程
select name,type,body from mysql.proc where db='python';
函数实例:
-- 输出 0 ~ 100 间的偶数
-- 递增某一个值
-- 判断该值是否为偶数
-- 将偶数 拼接成一个字符串 最后返回
delimiter //
create function f3() returns varchar(300)
begin
-- 1. 声明递增的值 i, 拼接结果的 res
declare i int default 0;
declare res varchar(300) default '';
-- 2. 通过 while 递增 i
while i <= 100 do
-- 3. 判断 i 是否是偶数
if i % 2 = 0 then
-- 4. 拼接偶数
set res = concat(res,' ',i);
end if;
-- 递增 i
set i = i + 1;
end while;
-- 5. 返回 res
return res;
end
//
delimiter ;
储存过程实例:
-- 传入一个英雄的 id 删除该英雄,并且返回剩下的英雄总人数
delimiter //
create procedure deleteherobyid_getcount(in hid int unsigned,out rescount int)
begin
delete from mm_users where id = hid;
select count(*) from mm_users into rescount;
end
//
delimiter ;