mysql存储过程及常用函数

原文:mysql存储过程及常用函数

一.函数

1.数学函数

CEIL()进一取整

SELECT CEIL(1.2);2

FLOOR()舍一取整

SELECT FLOOR(1.9);9

MOD取余数(取模)

SELECT MOD(3,8);3--3对8取模

POWER()幂运算

SELECT POWER(3,2);9

ROUND()四舍五入

SELECT ROUND(123.456,2);123.46

TRUNCTATE数字截取

SELECT TRUNCATE(123.456,2);123.45

ABS()取绝对值

SELECT ABS(-123);123

PI()圆周率

SELECT PI();3.14

RAND()和RAND(X)

SELECT RAND();0到1之间的一个随机数

SELECT RAND(2);0到1之间的一个随机数

ORDER BY RAND();按随机排序

SIGN(X)得到数值符合正数0和负数1

EXP(X)e的X方

2.字符串函数

LENGTH返回字符串长度

SELECT LENGTH(‘KAIKEBA‘);7

SELECT LENGTH(‘开课吧‘);6

CHAR_LENGTH返回字符串的字符数

SELECT CHAR_LENGTH(‘KAIKEBA‘);7

SELECT CHAR_LENGTH(‘开课吧‘);3

CONCAT(S1,S2,……)将字符串连接到一起

SELECT CONCAT(‘S‘,‘S‘,‘M‘);SSM

SELECT CONCAT(‘S‘,‘ ‘,‘M‘);SM

SELECT CONCAT(‘S‘,‘S‘,NULL);NULL字符串中有NULL,结果为NULL.

CONCAT_WS(S1,S2,……)以指定的分隔符将字符串连接到一起

SELECT CONCAT_WS(‘#‘,‘S‘,‘w‘,‘M‘);S#w#M

SELECTCONCAT_WS(‘#‘,‘S‘,‘w‘,‘M‘,NULL);S#w#M

SELECT CONCAT_WS(NULL,‘S‘,‘w‘,‘M‘);NULL

UPPER(S)/UCASE(S)将字符串中的小写变大写

SELECTUPPER(‘RanDongmei‘),UCASE(‘RanDongmei‘);RANDONGMEI RANDONGMEI

LOWER(s)/LCASE(S)将字符串中的大写变小写

LEFT(S,N)/RIGHT(S,N)返回字符串S前N个字符,后N个字符

SELECT LEFT(‘kaikeba‘,3);kai

SELECT RIGHT(‘天天向上,加油‘,2);油

LPAD|RPAD使用指定字符左填充或右填充至规定字符数

SELECT LPAD(‘KAI‘,5,‘!‘);!!KAI

SELECT RPAD(‘KAI‘,5,‘!‘);KAI!!

LTRIM|RTRIM|TRIM去掉字符串左边|右边|两边的空格

SELECT ‘ abc‘;

SELECT CONCAT(‘+‘,‘ AVC ‘,‘+‘);+ AVC +

SELECT CONCAT(‘+‘,LTRIM(‘ AVC ‘),‘+‘);+AVC+

SELECT CONCAT(‘+‘,RTRIM(‘ AVC ‘),‘+‘);+AVC+

SELECT CONCAT(‘+‘,TRIM(‘ AVC ‘),‘+‘);+AVC+

只有TRIM采有下面两种形式,LTRIM与RTRIM没有

SELECT TRIM(‘ABCBA‘FROM ‘A‘);A

SELECT TRIM(‘A‘FROM ‘ABCNA‘);BCN

SELECT TRIM(‘A‘FROM ‘ABCANA‘);BCAN

REPEAT(S,N)将字符串S重复N次

SELECT REPEAT(‘A‘,10);AAAAAAAAAA

SPACE(N)填充N个空格

SELECT SPACE(5);

SELECT CONCAT(‘+‘,SPACE(5),‘+‘);+     +

REPLACE(S,S1,S2);将字符串S中的S1替换为S2

SELECTREPLACE(‘AAAASDDFO‘,‘A‘,‘R‘);RRRRSDDFO

STRCMP(S1,S2);比较字符串S1和S2,若相等返回0,若S1>S2返回1,若S1<S2返回-1.

SELECT STRCMP(‘A‘,‘A‘);0

SELECT STRCMP(‘A‘,‘B‘);-1

SELECT STRCMP(‘B‘,‘A‘);1第一个字符串大于第二个字符串

SELECT STRCMP(‘A‘,‘a‘);0不区分大小写

SUBSTRINT(S,a,b)从字符串的第a个字符取到第b个字符

SELECT SUBSTRING(‘KAIKEBA‘,1,3);KAI

从1开始,截取三个字符

SELECT SUBSTRING(‘KAIKEBA‘,-2,3);BA

SELECT SUBSTRING(‘KAIKEBA‘,-2,1);B

REVERSE(S);反转字符串S

SELECT REVERSE(‘ABCDE‘);EDCBA

ELT(N,S1,S2,S3,……);返回指定位置的字符串

SELECT ELT(3,‘a‘,‘b‘,‘c‘,‘d‘);c

3.日期时间函数

返回当前日期

SELECT CURDATE();

SELECT CURRENT_DATE();

返回当前时间

SELECT CURTIME();

SELECT CURRENT_TIME();

返回当前日期时间

SELECT NOW();2014-11-07

SELECT SYSDATE();

返回月份

SELECT MONTH(‘2014-12-16‘);12

SELECT MONTHNAME(NOW());NOVEMBER

返回星期几

SELECT DAYNAME(NOW());Friday

一周的第几天,1:星期日

SELECT DAYOFWEEK(NOW());6

返回日期是星期几,0代表星期一

SELECT WEEKDAY(NOW());4

SELECT WEEK(NOW());44一年中的第44个星期

SELECT YEAR(NOW());2014

SELECT HOUR(NOW());

SELECT MINUTE(NOW());

SELECT SECOND(NOW());

计算两个日期间相隔天数

SELECTDATEDIFF(‘1988-12-16‘,‘2014-11-07‘);-9457天

SELECTDATEDIFF(‘1964-04-16‘,‘2014-11-07‘);-18467天

4.系统函数

SELECT VERSION();当前数据库版本号

SELECT CONNECTION_ID();当前服务器的连接数

当前数据库:

SELECT DATABASE();

SELECT SCHEMA();

当前用户

SELECT USER();

SELECT SYSTEM_USER();

SELECT CURRENT_USER();

SELECT CURRENT_USER;

返回字符串STR的字符集

SELECT CHARSET(‘AFA‘);

SELECT LAST_INSERT_ID();最后一条插入记录ID号

5.加密函数

MD5()

PASSWORD();

SELECT MD5(‘ROOT‘);

SELECT PASSWORD(‘ROOT‘);

PASSWORD针对用户密码加密

SELECT * FROM user WHERE User=‘root‘\G;

添加权限时需要添加PASSWORD密码

6.流程函数

IF

SELECT IF(3>1,‘A‘,‘B‘);

SELECT id,username,IF(age>18,‘成年‘,‘未成年‘) FROM employee;

SELECT IFNULL(NULL,‘THIS IS NULL‘);THIS ISNULL

SELECT IFNULL(1,‘THIS IS NULL‘);1,只有为空时,才能变成后面这个值

二.存储过程

将SQL语句放在集合里,然后调用存储过程和函数来执行已经定义好的这些SQL语句,存储过程和函数可以避免程序开发人员重复编写相同的SQL语句存储过程和函数保存在mysql服务器中的一个存储和执行,可以减少客户端和服务器端数据传输的消耗。

将一组SQL语句组合在一起,并且将这些SQL语句当作一个整体,存储在mysql服务器中。

存储过程就是:存储在mysql服务器的一组当作一个整体执行的SQL语句集合。存储过程运行于服务器端,运行速度比较快,而且存储过程执行一次,它的执行规范驻留在高速缓冲存储器中,在以后的操作中只需要从高速缓冲存储器调用已编译好的二进制代码,可以避免程序开发人员重复编写相同的SQL语句、减少客户端和服务器端数据传输的消耗、提高系统性能和系统响应时间,也可以确保存储过程安全,因为我们使用存储过程可以完成数据库的所有操作,也可以通过编程的方式来控制对数据库操作的访问权限。

CREATE PROCEDURE

sp_name

([proc_parameter[...]])

[characteristic...]

routine_body

参数:三部分:

(1)输入输出的参数IN OUT INOUT

(2)名称

(3)类型

特性:

LANGUAGE SQL:执行体由SQL组成

DETERMINISTIC执行结果确定:相同输入得到相同输出

NOT DETERMINISTIC执行结果不确定

子程序使用SQL的一个限制:

CONTAINS SQL:子程序包含sql语句(默认)

NO SQL:子程序中不包含sql语句

READS SQL DATA子程序中包含查询数据语句

MODIFIES SQL DATA子程序中包含写数据语句

谁有权限执行存储过程

SQL SECURITY DEFINER|INVOKER

DEFINER:定义者(默认)

INVOKER:调用者

注释

COMMENT ‘string‘

1>创建存储过程

改变分解符

DELIMITER //

CREATE PROCEDURE sp_demo()

BEGIN

SELECT * FROM user;

END

//

DELIMITER ;

DELIMITER //

CREATE PROCEDURE age_from_user(IN user_idINT,OUT user_age INT)

READS SQL DATA

BEGIN

SELECT age FROM user WHERE id=user_id;

END

//

DELIMITER ;

2>创建存储函数

CREATE FUNCTION sp_name

[func_parameter[..]]

RETURNS type

DELIMITER //

CREATE FUNCTION username_from_user(user_idINT)

RETURNS VARCHAR(20)

BEGIN

RETURN (SELECT username FROM user WHERE id=user_id);

END

//

DELIMITER ;

3>调用存储过程和函数

CALL sp_name([paramer..])

调用时必须有权限

CALL sp_demo();

CALL age_from_user(1,@user_age);

CALL age_from_user(2,@user_age);

调用存储函数

SELECT username_from_user(3);

4>查看创建好的存储过程和函数

SHOW PROCEDURE STATUS LIKE ‘sp_demo‘\G;

SHOW FUNCTION STATUS LIKE‘username_from_user‘\G;

具体存储过程与函数的定义

SHOW CREATE PROCEDURE sp_demo\G;

SHOW CREATE FUNCTION username_from_user\G;

创建的存储过程与函数存在information_schema数据库下面的ROUTINES表中

USE information_schema;

SELECT * FROM ROUTINES\G;

5>修改存储过程与函数

ALTER PROCEDURE|FUNCTION

ALTER PROCEDURE sp_demo COMMENT ‘THIS IS ATEST PROCEDURE‘;

SHOW CREATE PROCEDURE sp_demo\G;

ALTER FUNCTION username_from_user COMMENT‘THIS IS A TEST FUNCTION‘;

SHOW CREATE FUNCTION username_from_user\G;

6>删除存储过程与函数

DROP PROCEDURE sp_demo;

DROP PROCEDURE IF  EXISTS sp_demo;

SHOW WARNINGS;

DROP FUNCTION username_from_user;

存储过程运行于服务器端,运行速度比较快,而且存储过程执行一次,它的执行规范驻留在高速缓冲存储器中,在以后的

操作中只需要从高速缓冲存储器调用已编译好的二进制代码,提高系统性能和系统响应时间。也可以确保存储过程安全,因为我们使用存储过程可以完成数据库的所有操作,也可以通过编程的方式来控制对数据库操作的访问权限。

时间: 2024-10-06 02:26:37

mysql存储过程及常用函数的相关文章

mysql存储过程、存储函数及流程控制

存储过程 一.基本语法 create procedure sp_name([proc_parameter[,...]]) [characteristic...]routine_body begin end sp_name 表示存储过程的名字 proc_parameter 存储过程参数例表[IN OUT INOUT]三个部分组成 其中IN 表示传进来的参数 其中OUT 表示传出去的参数 其中INOUT 表示传进来但最终传回的参数 routine_body 参数是SQL代码的内容(类似于触发器的fo

mysql 存储过程和存储函数

14.1.1 创建存储过程 MySQL中,创建存储过程的基本形式如下: CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body 其中,sp_name参数是存储过程的名称:proc_parameter表示存储过程的参数列表: characteristic参数指定存储过程的特性:routine_body参数是SQL代码的内容,可以用BEGIN…END来标志SQL代码的开始和结束. proc

mysql与oracle常用函数及数据类型对比

最近在转一个原来使用oracle,打算改为mysql的系统,有些常用的oracle函数的mysql实现顺便整理了下,主要是系统中涉及到的(其实原来是专门整理过一个详细doc的,只是每次找word麻烦). 特性 oracle mysql 字符串转日期 to_date str_to_date 日期类型 date 公元前4712年1月1日至公元9999年12月31日 datetime:取值范围:1000-01-01 00:00:00 到 9999-12-31 23:59:59 timestamp:取值

SqlServer存储过程中常用函数及操作

1.case语句 用于选择语句 SELECT ProductNumber, Category = CASE ProductLine WHEN 'R' THEN 'Road' WHEN 'M' THEN 'Mountain' WHEN 'T' THEN 'Touring' WHEN 'S' THEN 'Other sale items' ELSE 'Not for sale' END, Name FROM Production.Product ORDER BY ProductNumber; 用于u

Mysql中的常用函数:

1.字符串函数: (1).合并字符串 concat():// concat('M','y',"SQL",'5.5');== MySQL5.5//当传入的参数有一个值为NULL,返回的结果值为NULL concat_ws();// 指定分隔符插入到字符串中:concat_ws(":",'2017','09');==2017:09,但如果分隔符是NULL的话,结果就为NULL,参数是NULL,不影响结果 (2).比较字符串大小的函数: select strcmp(字符串

存储过程编程-常用函数

Oracle中如何使用转义字符: SeparCh  char  := chr(1 ); NVL( string1, replace_with):  功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL.注意事项:string1和replace_with必须为同一数据类型,除非显式的使用TO_CHAR函数进行类型转换.例:NVL(TO_CHAR(numeric_column), 'some stri

MYSQL的一些常用函数

#数学函数 SELECT ABS(-8);#绝对值SELECT CEILING(9.8);#查询大于等于给定数值的最小整数SELECT FLOOR(9.8);#查询小于等于给定数值的最大整数SELECT RAND();#查询0~1之间的随机数SELECT SIGN();#符号函数,正数返回1,负数返回-1,0不变 #字符串函数 SELECT CHAR_LENGTH('计算机编程');#返回字符串的字符数量SELECT CONCAT('我','喜欢','计算');#合并字符串SELECT INSE

mysql字符串的常用函数(截取和拼接)

#截取字符串(先正序取2个,再倒序取1个)SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('aaa-gg-cc-dd','-',2),'-',-1) #获取子表某个字段的拼接(如:goods_name;goods_name2;goods_name3)select o1.sn,group_concat(g1.goods_name separator ';') from orders o1left join goods_orders g1 on g1.order_id

当PHP遇到MySQL存储过程

1.MySQL存储过程 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的.数据库中的存储过程可以看做是对编