一:sql也是一门编程语言,可以用其编程
二:基本常规的编程要素
变量,运算符,表达式,流程控制,函数
变量:
典型的,字段名就是变量名,字段就是变量!
特殊的变量,例如系统内置变量(character_set_xxx , autocommit)
变量的典型操作:赋值,取得值!
用户自定义变量:
用户自定义变量需要使用 @ 作为变量名的前缀,用于区分是否是系统内置变量
set 语句;可以完成对变量的设置
set 变量名=变量值
怎么取得?
采用select语句即可!
编程的实现:
一共有三种编程方式:触发器,存储函数(自定义函数),存储过程
函数:
对于mysql来讲,有内置函数
rand(),生成随机数的函数,得到0-1之间的随机数
需要配合取整使用
floor() ,向下取整
substring(字符串,位置,长度) , 截取字符串函数
注意:从1开始的下标,而且以字符数为单位:
char_length() 字符数量
length() 字节长度
convert(字符串 using 字符集) 字符转换到相应的目标字符集上
select id,convert(stu_name using gbk),height,money into outfile 'e:/VIP/student.csv'
fields terminated by ','
lines terminated by '\r\n'
from select_student;
自定义函数:
函数的要素:函数名,函数体(返回值),函数参数
函数的基本使用:声明,调用
声明:
create function functoin_name () returns int
begin
函数体
end
创建自定义函数:
delimiter $$
create function hello_world() returns varchar(20)
begin
return 'hello world';
end
$$
delimiter ;
调用自定义函数:
类似于系统函数即可!
注意:函数是存储在某个数据库内的,因此与库是相关的
自定义函数参数:
delimiter $$
create function sayHello(name varchar(10)) returns varchar(20)
begin
return concat('hello ',name);
end
$$
delimiter ;
注意:参数也是需要有类型,而且不用使用 @ ,原因是函数内的变量不用区分!参数是一个局部变量!
函数局部变量与函数外全局变量的作用域问题:
作用域是重叠的!在函数内,可以访问到函数外所定义的全局变量!
局部变量:
此时在函数内,使用关键字 declare 来声明局部变量 (相当于JS中声明变量时用的var)!
delimiter $$
create function f2() returns varchar(20)
begin
declare v1 char(3) default 'php';
return v1;
end
$$
delimiter ;
流程控制:
分支:
if 条件 then 语句
else if 条件 then 语句
else 语句
end if;
循环:
while 条件 do
循环体
end while;
示例1:求1-N之和
delimiter $$
create function sumN(n int) returns int
begin
declare i int default 1;
declare sum int default 0;
while i<=n do
set sum=sum+i;
set i=i+1;
end while;
return sum;
end
$$
delimiter ;
示例2:拼凑随机的名字!
getName(2|3|4)
参数为名字的长度,而返回值为名字!
业务逻辑:
取得姓,在某个集合内取得
再取得名字(根据字数,取得的数量不同)。
delimiter $$
create function getName(n int) returns varchar(5)
begin
declare allow_xing char(8) default '赵钱孙李周吴郑王';
declare allow_ming char(12) default '淘宝百度天猫微信飞秋极限';
declare xing char(1);
declare ming varchar(4) default '';
declare i int default 1;
if !(n between 2 and 4) then
return 0;
end if;
set xing = substring(allow_xing,floor(rand()*8)+1,1);
while i <= n-1 do
set ming = concat(ming,substring(allow_ming,floor(rand()*12)+1,1));
set i = i + 1;
end while;
return concat(xing,ming);
end
$$
delimiter ;
转载于:https://blog.51cto.com/ginvip/1722366