一、存储函数

  相当于php或者js中有返回值的函数 --完成一定“计算”后返回单个的数据值

  • 定义:

    create function 函数名(parameter p1 value_type, parameter p2 value_type, ...)

    returns value_type

    begin

      [statement_list]

      return value;

    end

    • value_type 数据类型 必须有返回语句 return 且返回值类型和设定的类型一致
  • 调用形式::跟系统函数调用一样,直接使用名字,定义有参数则必须给定实参
  • 实例:求 n的阶乘
    create function factorial_gao(num int)
    returns int
    begin
    declare n int default 1;
    declare fac int default 1;
    while n <=num do
    set fac = fac*n;
    set n = n+1;
    end while;
    return fac;
    end;

   默认以;为语句结束符,需要delimiter 结束符 来更改,确保存储函数以“一条语句”执行

  • 删除:drop function [if exists] 存储函数名;

二、存储过程

  相当于php或者js中没有返回值的函数 --它只“做事”(包含增删改查),不返回单个数据

  • 定义

    create procedure 存储过程名([in|out|inout] p1 value_type, [in|out|inout]  p2 value_type,...)

    begin

    [statement_list]

    #其中查询语句会作为存储过程调用的结果,跟执行select语句一样,返回结果集

    end

  • 调用:call 存储过程名(形参 1, 形参 2);
  • 删除:drop procedure [if exists] 存储过程名;
  • 示例:向表saving(存款)中添加新数据
    create procedure insertRec(acc varchar(20), des float)
    begin
    insert into saving(account, deposit) values(acc, des);
    end;

    添加之前:

   添加之后:

三、触发器

  就是数据库中预先设定好的用于某个表上发生某个时间(增/删/改)的时候(前/后)来完成某些任务的一种代码机制。

  • 定义

    create trigger trigger_name before|after insert|update|delete on table_name for each row

    begin

      #要执行的代码

      #不能使用select 语句

      #不能返回数据

    end

    • before|after insert|update|delete  组合有6种形式,既每个表可以设定触发器有6种
  • 删除::drop trigger [if exists] trigger_name;
  • 实例:表test新添加的数据,只讲前2个字段title,content 显示给客户看

     讲给客户看的定义为字表:test_sub

     表test:

     表test_sub:

     定义触发器:

create trigger createSub after insert on test for each row
begin
set @t1 = new.title;
set @c1 = new.content;
insert into test_sub(title, content) values (@t1, @c1);
end;

     表test添加新数据:

mysql> insert into test(title,content, num)values('sixth', 'this is the sixth data.', 525.20)$
Query OK, 1 row affected (0.01 sec)

    添加新数据后

      表test:

      字表test_sub:

四、总结

  共同点

    使用普通变量

    使用流程控制

    都是一段“代码”

  存储函数

    必须返回一个数据

    不能有select语句

    调用结果可以作为一个“数据”使用,用于select语句或者数据操作语句中

  存储过程

    没有返回值

    可以使用select语句

    形参 可以设置数据流向in out  inout

    调用:call procedure_name(形参 1 数据类型,...)

  触发器

    没有返回值

    不能使用select语句

    没有参数,也不能被调用

    由设定条件触发自动调用执行

  

mysql 编程的更多相关文章

  1. Visual C++ 2008进行MySQL编程

    visual c++ 2008进行MySQL编程(ODBC) -- (一) 套装安装 visual c++ 2008进行MySQL编程(ODBC) --(二) CDatabase操作数据库 visua ...

  2. MySQL编程基础

    本文是关于MySQL编程中的一些基础知识,包括变量和运算符.常用语句.函数. 一.变量与运算符 1.用户会话变量声明:SET @变量名 = 表达式;//即:用户会话变量无需提前定义,直接用赋值语句赋值 ...

  3. C++ MySQL编程

    MySQL编程需要包含<mysql.h>头文件.该文件一般在MySQL安装目录下的include文件夹下. 包含头文件还不够,还需要包含“libmysql.lib”库,一般在lib文件夹下 ...

  4. MySql——编程

    基本语法形式 语句块模式: 在mysql编程中,begin....end;基本代替了原来编程语句中的{...}语法. 但又有所区别: 一个bigin...end;块,可以给定一个“标识符”,并且可以使 ...

  5. mysql 编程初步

    mysql 编程 基本语法形式: 语句块模式 [begin_label] begin [statement_list] end [end_label]; label 标识符可以省略,但必须相同 流程控 ...

  6. visual c++ 2013进行MySQL编程(ODBC) -- (一) 套装安装

    最近写了有些技术类文章了,只因为最近研究多了些东西,有一些项目用到了,所以自己记录一下,怕自己忘记,如果有哪位同学有自己的见解,可以邮件或者回复,技术类的探讨,不管对否,都是欢迎的. 操作之前,必须安 ...

  7. MySQL编程

    MySQL 使用标准 SQL 检索和处理数据,体积小.开源.免费,易于快速部署.正是因为这些特点,使得其在互联网行业,特别是 Web 应用方面使用相当广泛.至今最新的版本已到 8.0. 一 基本操作 ...

  8. python入门编程之mysql编程

    python关于mysql方面的连接编程 前提:引入mysql模块MySQLdb,即:MySQL_python-1.2.5-cp27-none-win_amd64.whl 如果要用线程池,则要引用模块 ...

  9. JAVA / MySql 编程——第八章 DAO 模式

    1.        数据持久化:将程序中的数据在瞬时状态和持久状态间转换的机制即为数据持久化: 2.        持久化的实现方式:数据库.普通文件.XML文件: 3.        JDBC封装: ...

  10. JAVA / MySql 编程——第七章 JDBC

    1.JDBC:JDBA是Java数据库连接(Java DataBase Connectivity)技术的简称,提供连接各种常用数据库的能力:         ●Java是通过JDBC技术实现对各种数据 ...

随机推荐

  1. Codeforces Round #527-D1. Great Vova Wall (Version 1)(思维+栈)

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  2. Net Core开源日志框架

    Net Core开源日志框架 Exceptionless - .Net Core开源日志框架 作者:markjiang7m2原文地址:https://www.cnblogs.com/markjiang ...

  3. SpringBoot---Web开发---SSL配置

    1.[生成证书] 2.[SpringBoot配置SSL] 3.[http转向https]

  4. 机器学习框架ML.NET学习笔记【9】自动学习

    一.概述 本篇我们首先通过回归算法实现一个葡萄酒品质预测的程序,然后通过AutoML的方法再重新实现,通过对比两种实现方式来学习AutoML的应用. 首先数据集来自于竞赛网站kaggle.com的UC ...

  5. java join 方法的使用

    在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结束.这时,如果主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据 ...

  6. HTTP状态码完整版

    HTTP 状态代码的完整列表   1xx(临时响应) 用于表示临时响应并需要请求者执行操作才能继续的状态代码. 代码 说明 100(继续) 请求者应当继续提出请求.服务器返回此代码则意味着,服务器已收 ...

  7. jvm 内存dump、gc查看、线程死锁,jmap、jstack、jstat

    1. jstat     这个命令对于查看Jvm的堆栈信息很有用.能够查看eden,survivor,old,perm等heap的capacity,utility信息 对于查看系统是不是有能存泄漏以及 ...

  8. SpringBoot热部署的两种方式

    SpringBoot热部署方式一共有两种,分别使用两种不同的依赖 SpringBoot 1.3后才拥有SpringBoot devtools热部署 ①:spring-boot-devtools   ② ...

  9. angularJS在移动端的点击事件延迟问题

    在运用angular开发移动端的应用时,发现它并没有将ng-click做兼容,在移动端使用ng-click事件仍然会有300ms延迟.后来发现angular有一个专门针对移动端的模块:angular- ...

  10. 访问权限修饰符-static-final-this-super-匿名对象

    1.this关键字的作用     1)调用本类中的属性;     2)调用本类中的构造方法;且只能放首行,且必须留一个构造方法作为出口,即不能递归调用     3)表示当前对象; 2.匿名对象     ...