语法:

新建:

Create function
function_name(參数列表)returns返回值类型

函数体

函数名,应该合法的标识符,而且不应该与已有的keyword冲突。

一个函数应该属于某个数据库,能够使用db_name.funciton_name的形式运行当前函数所属数据库,否则为当前数据库。

參数部分,由參数名和參数类型组成。

返回值类类型

函数体由多条可用的mysql语句,流程控制,变量声明等语句构成。

多条语句应该使用begin end语句块包括。

注意,一定要有return返回值语句。

删除:

Dropfunction if existsfunction_name;

查看:

Show function status like ‘partten’

Show create functionfunction_name;

改动:

Alter functionfunction_name函数选项。

样例:

Hello world!

IF语句

IF search_conditionTHEN

statement_list

[ELSEIF search_conditionTHENstatement_list]

...

[ELSE statement_list]ENDIF;

CASE语句

CASE case_value

WHEN when_valueTHENstatement_list

[WHEN when_value THENstatement_list]

...

[ELSE statement_list]

END CASE;

循环:

While

[begin_label:]WHILEsearch_conditionDO

statement_list

END WHILE [end_label];

假设须要在循环内提前终止 while循环,则须要使用标签;标签须要成对出现。

退出循环

退出整个循环leave         相当于break

退出当前循环iterate         相当于 continue

通过退出的标签决定退出哪个循环。

变量声明:

语法:

DECLARE var_name[,...] type [DEFAULT value] 

这个语句被用来声明局部变量。要给变量提供一个默认值,请包括一个DEFAULT子句。值能够被指定为一个表达式,不须要为一个常数。假设没有DEFAULT子句,初始值为NULL。 

使用

语序使用 set 和 select into语句为变量赋值。



注意在函数内是能够使用全局变量(用户自己定义的变量的)@XXX   全局变量不用声明 能够直接@XXX使用。

样例:获取当前班级内,最大的学号。

參考学生表

create table join_student(

stu_id int not
null auto_increment,

stu_no char(10),

class_id int not
null,

stu_name varchar(10),

stu_info text,

primary key (stu_id)

);

计算新增学号

drop function if existssno;

delimiter $$             #在包括有语句块时  能够更换语句结束符“;”  为“$$”

create function
sno(c_id int)returns
char(10)

begin

declare last_no char(10);    #声明一个局部变量  用来保存当前最大的学号, 假设没有就为null

declare class_name char(10);

select stu_no from join_student where class_id=c_id order
by stu_no desc limit
1 into last_no;

if last_no is null then      #假设为空代表当前班级没有学生   从1開始,获得班级名字

return concat ((select c_name from join_class where
id=c_id into class_name),'001');     #concat() 函数的作用是连接字符串。

else

return concat(left(last_no,7),lpad(right(last_no,3)
+ 1, 3, '0'));

end if;

#return @last_no;

end

$$

delimiter ;

随机获得学生名字。

drop function if exists sname;

delimiter $$

create function
sname() returns char(2)

begin

declare first_name char(16) default '赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨';

declare last_name char(10) default '甲乙丙丁戊己庚辛壬癸';

declare full_name char(2);

set full_name=concat(substring(first_name,floor(rand()*16+1),
1), substring(last_name,floor(rand()*10+1), 1));

return full_name;

end

$$

delimiter ;

========================================================================================

mysql经常使用内置函数

数值函数

Abs(X),绝对值abs(-10.9) = 10

Format(X,D),格式化千分位数值format(1234567.456, 2) =1,234,567.46

Ceil(X),向上取整ceil(10.1) = 11

Floor(X),向下取整floor (10.1) = 10

Round(X),四舍五入去整

Mod(M,N) M%N M MOD N 求余 10%3=1

Pi(),获得圆周率

Pow(M,N) M^N

Sqrt(X),算术平方根

Rand(),随机数

TRUNCATE(X,D) 截取D位小数

时间日期函数

Now(),current_timestamp(); 当前日期时间

Current_date();当前日期

current_time();当前时间

Date(‘yyyy-mm-dd HH;ii:ss’);获取日期部分

Time(‘yyyy-mm-dd HH;ii:ss’);获取时间部分

Date_format(‘yyyy-mm-dd HH;ii:ss’,’%D %y %a %d %m %b %j');

Unix_timestamp();获得unix时间戳

From_unixtime();//从时间戳获得时间

字符串函数

LENGTH(string )   //string长度,字节

CHAR_LENGTH(string)    //string的字符个数

SUBSTRING(str ,position [,length ])   //从str的position開始,取length个字符

REPLACE(str ,search_str ,replace_str)   //在str中用replace_str替换search_str

INSTR(string ,substring )   //返回substring首次在string中出现的位置

CONCAT(string [,... ])   //连接字串

CHARSET(str)  //返回字串字符集

LCASE(string )  //转换成小写

LEFT(string ,length )   //从string2中的左边起取length个字符

LOAD_FILE(file_name)   //从文件读取内容

LOCATE(substring , string [,start_position ])   //同INSTR,但可指定開始位置

LPAD(string ,length ,pad )   //反复用pad加在string开头,直到字串长度为length

LTRIM(string )  //去除前端空格

REPEAT(string ,count )   //反复count次

RPAD(string ,length ,pad)   //在str后用pad补充,直到长度为length

RTRIM(string )   //去除后端空格

STRCMP(string1 ,string2 )   //逐字符比較两字串大小

流程函数:

CASE WHEN [condition]THEN result[WHEN [condition]THEN result ...][ELSE result]END   多分支

IF(expr1,expr2,expr3)  双分支。

聚合函数

Count()

Sum();

Max();

Min();

Avg();

Group_concat()

其它经常使用函数

Md5();

Default();

mysql中自己定义函数编程的更多相关文章

  1. 在MySql中如何定义像Java中类型的Boolean类型

    在MySql中如何定义像Java中类型的Boolean类型数据..其实,mysql中 是没有直接定义成Boolean这种数据类型.它只能定义成 tinyint(1) ;如果长度是1,tinyint(1 ...

  2. mysql中实现行号,oracle中的rowid

    mysql中实现行号需要用到MYSQL的变量,因为MySql木有rownumber. MYSQL中变量定义可以用 set @var=0 或 set @var:=0 可以用=或:=都可以,但是如果变量用 ...

  3. [转载]mysql中实现行号,oracle中的rowid

    mysql中实现行号需要用到MYSQL的变量,因为MySql木有rownumber. MYSQL中变量定义可以用 set @var=0 或 set @var:=0 可以用=或:=都可以,但是如果变量用 ...

  4. mysql 函数在源码中的定义

    大牛那海蓝蓝 MySQL提供了较为丰富的SQL语句,用以支持MySQL提供的主要功能.在数据库内部,MySQL又是怎么知道自己能够处理哪些对象.处理哪些事情的? 如果我们输入一条SQL语句,MySQL ...

  5. MySQL中变量的定义和变量的赋值使用(转)

    说明:现在市面上定义变量的教程和书籍基本都放在存储过程上说明,但是存储过程上变量只能作用于begin...end块中,而普通的变量定义和使用都说的比较少,针对此类问题只能在官方文档中才能找到讲解. 前 ...

  6. mysql中变量的定义

    mysql中的变量定义 mysql的变量分为系统变量和用户变量,mysql系统定义的变量是系统变量,用户自己定义的变量为用户变量.对于系统变量,用户只能够改变它的值不能够创建新的系统变量.对于用户变量 ...

  7. 转:MySQL中变量的定义和变量的赋值使用(转)

    MySQL中变量的定义和变量的赋值使用(转)   说明:现在市面上定义变量的教程和书籍基本都放在存储过程上说明,但是存储过程上变量只能作用于begin...end块中,而普通的变量定义和使用都说的比较 ...

  8. 【转】MySql中的函数

    原文:http://www.cnblogs.com/kissdodog/p/4168721.html MySQL数据库提供了很多函数包括: 数学函数: 字符串函数: 日期和时间函数: 条件判断函数: ...

  9. MySQL中有关TIMESTAMP和DATETIME的总结

    一.MySQL中如何表示当前时间? 其实,表达方式还是蛮多的,汇总如下: CURRENT_TIMESTAMP CURRENT_TIMESTAMP() NOW() LOCALTIME LOCALTIME ...

随机推荐

  1. Scrum之Sprint会议

    Scrum的项目过程有一系列的Sprint组成. Sprint的长度一般控制在2-4周. 通过固定的周期保持良好的节奏. 产品的设计.开发.测试都在Sprint期间完成. Sprint结束时交付可以工 ...

  2. How To Set Up Port Forwarding in Linux

    Port forwarding usually used when we want our computer act like a router. Our computer receive the p ...

  3. error while loading shared libraries: lib******: cannot open shared object file: No such file or directory

    程序编译成功后,运行时错误: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object fi ...

  4. 企业网管软件实战之SolarWinds LANsurveyor

    SolarWinds LANsurveyor是一款比较容易掌握的网络管理软件,他能自动探索你的LAN或WAN,并生成全面的,易于浏览的集成了OSI 2层和 3层 拓扑数据的网络图表.其主要功能有: 1 ...

  5. 如何通过Android Studio发布library到jCenter和Maven Central

    http://www.jianshu.com/p/3c63ae866e52# 在Android Studio里,如果你想引入任何library到自己的项目中,只需要很简单的在module的build. ...

  6. 【多线程】Java并发编程:Lock(转载)

    原文链接:http://www.cnblogs.com/dolphin0520/p/3923167.html Java并发编程:Lock 在上一篇文章中我们讲到了如何使用关键字synchronized ...

  7. Working with Sprites

    [Working with Sprites] 1.An SKSpriteNode object can be drawn either as a rectangle with a texture ma ...

  8. mac电脑Coding显示/隐藏文件

    苹果Mac OS X操作系统下,隐藏文件是否显示有很多种设置方法,最简单的要算在Mac终端输入命令.显示/隐藏Mac隐藏文件命令如下(注意其中的空格并且区分大小写): 显示Mac隐藏文件的命令:def ...

  9. URAL 2069 Hard Rock (最短路)

    题意:给定 n + m 个街道,问你从左上角走到右下角的所有路的权值最小的中的最大的. 析:我们只要考虑几种情况就好了,先走行再走列和先走列再走行差不多.要么是先横着,再竖着,要么是先横再竖再横,要么 ...

  10. Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析(转载)

    简介: 这个分为两个部分的系列文章研究了 Apache Tomcat 服务器的系统架构以及其运用的很多经典设计模式.第 1 部分 分析了 Tomcat 的工作原理,第 2 部分将分析 Tomcat 中 ...