MySQL存储过程中的基本函数和触发器的相关学习教程

 更新时间:2015年11月25日 12:08:06   作者:qhw  
这篇文章主要介绍了MySQL存储过程中的基本函数和触发器的相关学习教程,包括触发器的创建和删除等基本操作,需要的朋友可以参考下

MySQL存储过程的常用函数

一.字符串类
CHARSET(str) //返回字串字符集
CONCAT (string2 [,... ]) //连接字串
INSTR (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0
LCASE (string2 ) //转换成小写
LEFT (string2 ,length ) //从string2中的左边起取length个字符
LENGTH (string ) //string长度
LOAD_FILE (file_name ) //从文件读取内容
LOCATE (substring , string [,start_position ] ) 同INSTR,但可指定开始位置
LPAD (string2 ,length ,pad ) //重复用pad加在string开头,直到字串长度为length
LTRIM (string2 ) //去除前端空格
REPEAT (string2 ,count ) //重复count次
REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str
RPAD (string2 ,length ,pad) //在str后用pad补充,直到长度为length
RTRIM (string2 ) //去除后端空格
STRCMP (string1 ,string2 ) //逐字符比较两字串大小,
SUBSTRING (str , position [,length ]) //从str的position开始,取length个字符,
注:mysql中处理字符串时,默认第一个字符下标为1,即参数position必须大于等于1

mysql> select substring('abcd',0,2);

+-----------------------+
| substring('abcd',0,2) |
+-----------------------+
| |
+-----------------------+
1 row in set (0.00 sec)


mysql> select substring('abcd',1,2);
+-----------------------+
| substring('abcd',1,2) |
+-----------------------+
| ab |
+-----------------------+
1 row in set (0.02 sec)

TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字符
UCASE (string2 ) //转换成大写
RIGHT(string2,length) //取string2最后length个字符
SPACE(count) //生成count个空格

二.数学类

ABS (number2 ) //绝对值
BIN (decimal_number ) //十进制转二进制
CEILING (number2 ) //向上取整
CONV(number2,from_base,to_base) //进制转换
FLOOR (number2 ) //向下取整
FORMAT (number,decimal_places ) //保留小数位数
HEX (DecimalNumber ) //转十六进制
注:HEX()中可传入字符串,则返回其ASC-11码,如HEX('DEF')返回4142143
也可以传入十进制整数,返回其十六进制编码,如HEX(25)返回19
LEAST (number , number2 [,..]) //求最小值
MOD (numerator ,denominator ) //求余
POWER (number ,power ) //求指数
RAND([seed]) //随机数
ROUND (number [,decimals ]) //四舍五入,decimals为小数位数]
注:返回类型并非均为整数,如:
(1)默认变为整形值

mysql> select round(1.23);
+-------------+
| round(1.23) |
+-------------+
| 1 |
+-------------+
1 row in set (0.00 sec)

mysql> select round(1.56);
+-------------+
| round(1.56) |
+-------------+
| 2 |
+-------------+
1 row in set (0.00 sec)

(2)可以设定小数位数,返回浮点型数据

mysql> select round(1.567,2);
+----------------+
| round(1.567,2) |
+----------------+
| 1.57 |
+----------------+
1 row in set (0.00 sec)

SIGN (number2 ) //返回符号,正负或0
SQRT(number2) //开平方


三.日期时间类

ADDTIME (date2 ,time_interval ) //将time_interval加到date2
CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //转换时区
CURRENT_DATE ( ) //当前日期
CURRENT_TIME ( ) //当前时间
CURRENT_TIMESTAMP ( ) //当前时间戳
DATE (datetime ) //返回datetime的日期部分
DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或时间
DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetime
DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减去一个时间
DATEDIFF (date1 ,date2 ) //两个日期差
DAY (date ) //返回日期的天
DAYNAME (date ) //英文星期
DAYOFWEEK (date ) //星期(1-7) ,1为星期天
DAYOFYEAR (date ) //一年中的第几天
EXTRACT (interval_name FROM date ) //从date中提取日期的指定部分
MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串
MAKETIME (hour ,minute ,second ) //生成时间串
MONTHNAME (date ) //英文月份名
NOW ( ) //当前时间
SEC_TO_TIME (seconds ) //秒数转成时间
STR_TO_DATE (string ,format ) //字串转成时间,以format格式显示
TIMEDIFF (datetime1 ,datetime2 ) //两个时间差
TIME_TO_SEC (time ) //时间转秒数]
WEEK (date_time [,start_of_week ]) //第几周
YEAR (datetime ) //年份
DAYOFMONTH(datetime) //月的第几天
HOUR(datetime) //小时
LAST_DAY(date) //date的月的最后日期
MICROSECOND(datetime) //微秒
MONTH(datetime) //月
MINUTE(datetime) //分


附:可用在INTERVAL中的类型
DAY ,DAY_HOUR ,DAY_MINUTE ,DAY_SECOND ,HOUR ,HOUR_MINUTE ,HOUR_SECOND ,MINUTE ,MINUTE_SECOND,MONTH ,SECOND ,YEAR

 MySql存储过程和触发器
1.创建存储过程

DELIMITER //
DROP PROCEDURE IF EXISTS `PROC_TEST`//
CREATE PROCEDURE `PROC_TEST`(TABLE_NAME VARCHAR(20),NUM INT)
BEGIN
  SELECT * FROM TABLE_NAME LIMIT NUM;
END//
DELIMITER ;

调用存储过程:

CALL PROC_TEST('USER',20);

删除存储过程:

DROP PROCUDURE productpricing

2.创建触发器
~~语法~~
CREATE TRIGGER <触发器名称> --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.
{ BEFORE | AFTER } --触发器有执行的时间设置:可以设置为事件发生前或后。
{ INSERT | UPDATE | DELETE } --同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。
ON <表名称> --触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。
FOR EACH ROW --触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。
<触发器SQL语句> --触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。

--你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同。
 
创建触发器:t_afterinsert_on_tab1
 
作用:增加tab1表记录后自动将记录增加到tab2表中
 

DROP TRIGGER IF EXISTS `t_afterinsert_on_tab1`; 
CREATE TRIGGER t_afterinsert_on_tab1 
AFTER INSERT ON `tab1` 
FOR EACH ROW 
BEGIN
   insert into tab2(tab2_id) values(new.tab1_id); 
END;

创建触发器:t_afterdelete_on_tab1
作用:删除tab1表记录后自动将tab2表中对应的记录删去

DROP TRIGGER IF EXISTS `t_afterdelete_on_tab1`; 
CREATE TRIGGER `t_afterdelete_on_tab1` 
AFTER DELETE ON `tab1` 
FOR EACH ROW 
BEGIN
   delete from `tab2` where tab2_id=old.tab1_id; 
END;

删除触发器:
 

DROP TRIGGER [schema_name.]trigger_name;

相关文章

  • 以数据库字段分组显示数据的sql语句(详细介绍)

    以数据库字段分组显示数据的sql语句(详细介绍)

    本篇文章是对以数据库字段分组显示数据的sql语句进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 一文深入探讨MySQL是如何解决幻读问题

    一文深入探讨MySQL是如何解决幻读问题

    SQL标准中定义了4种隔离级别,分别是读未提交、读已提交、可重复读以及序列化。不同的隔离级别下,本文将重点探讨下MySQL是如何解决幻读问题的,需要的朋友可以跟着小编一起来探讨一下
    2023-07-07
  • MySQL 5.0.96 for Windows x86 32位绿色精简版安装教程

    MySQL 5.0.96 for Windows x86 32位绿色精简版安装教程

    这篇文章主要介绍了MySQL 5.0.96 for Windows x86 32位绿色精简版安装教程,需要的朋友可以参考下
    2017-10-10
  • explain命令为什么可能会修改MySQL数据

    explain命令为什么可能会修改MySQL数据

    这篇文章主要介绍了explain命令为什么可能会修改MySQL数据,帮助大家更好的理解和使用MySQL,感兴趣的朋友可以了解下
    2020-12-12
  • MySQL笔记之连接查询详解

    MySQL笔记之连接查询详解

    连接查询是将两个或两个以上的表按某个条件连接起来,从中选取需要的数据
    2013-05-05
  • Mysql中key和index的区别点整理

    Mysql中key和index的区别点整理

    在本篇文章里小编给大家整理的是关于Mysql中key和index的区别点整理,需要的朋友们可以学习下。
    2020-03-03
  • MySQL的DATE_FORMAT函数的使用

    MySQL的DATE_FORMAT函数的使用

    这篇文章主要介绍了MySQL的DATE_FORMAT函数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 一文读懂MySQL 表分区

    一文读懂MySQL 表分区

    MySQL自带了分区功能,我们可以创建一个带有分区的表,而且不需要借助任何外部工具,本文主要了介绍了MySQL表分区,具有一定的参考价值,感兴趣的小伙伴们可以参考一下<BR>
    2022-03-03
  • win10 mysql导出csv的两种方式

    win10 mysql导出csv的两种方式

    win10导出csv有两种方式,第一种是借助工具,第二种是原始SQL语句导出,这篇文章主要介绍了win10 mysql导出csv的两种方式,需要的朋友可以参考下
    2019-12-12
  • MySQL安装starting the server失败的2种解决办法(推荐!)

    MySQL安装starting the server失败的2种解决办法(推荐!)

    MySQL是一个非常强大的关系型数据库,但有些初学者在安装配置的时候,遇到种种的困难,下面这篇文章主要给大家介绍了关于MySQL安装starting the server失败的2种解决办法,需要的朋友可以参考下
    2023-04-04

最新评论