一、存储函数

  相当于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. CC33:碰撞的蚂蚁

    题目 在n个顶点的多边形上有n只蚂蚁,这些蚂蚁同时开始沿着多边形的边爬行,请求出这些蚂蚁相撞的概率.(这里的相撞是指存在任意两只蚂蚁会相撞) 给定一个int n(3<=n<=10000), ...

  2. python进阶02 特殊方法与特殊属性

    python进阶02 特殊方法与特殊属性 一.初始化.析构 1.初始化 # python中有很多双下划线开头且以下划线结尾的固定方法,它们会在特定的时机被触发执行,这便是特殊方法 # 在实例化的时候就 ...

  3. NOI2015软件包管理器 树剖线段树

    题目: 一棵树,兹磁 1.查询根到一个点的染色点数并全染好 2.查询子树内染色点数并把颜色洗掉 树剖裸题,丝毫不虚(为什么我考试的时候碰不到这种好题呢)好像20min写完搞定 #include < ...

  4. Linux .Net Core

    Linux .Net Core自宿主应用程序瘦身记 一,.NET Core 自宿主应用程序个头有点大 发布.NET Core应用程序有两个方式,一种是“便携式”,一种是“自宿主式”.便携式发布时,目标 ...

  5. Windows和Ubuntu使用网线直连搭建局域网

    1.Windows下的配置:右键右下角的网络图标(或者右键网络→属性)→更改适配器设置→以太网→右键属性→TCP/IPv4→IP地址(192.168.1.3)→子网掩码(255.255.255.0)→ ...

  6. ms sqlserver 登录失败 错误:4064

    无法打开用户默认数据库.登录失败.用户‘sa’登录失败.(Microsoft SQL Server, 错误:4064) 解决方法:解决方法:先用windows身份验证的方式登录进去,然后在 安全性=& ...

  7. POJA Star not a Tree?(模拟退火)

    题意 题目链接 给出$n$个点,求出一个点使得到各个点的距离之和最小,距离为欧几里得距离 Sol 模拟退火真是玄学,我退了一上午,最后把exp函数去了就A了. 后来改了改,发现是大小符号的问题.. 但 ...

  8. ABAP区别CLEAR、REFRESH、FREE

    CLEAR.REFRESH.FREE 内表:如果使用有表头行的内表,CLEAR 仅清除表格工作区域.例如 clear gs-school 清除工作区. 要重置整个内表而不清除表格工作区域,使用REFR ...

  9. Servlet--HttpServlet

    一.Servlet 接口(javax.servlet) 定义:     public interface Servlet      Implemented by: FacesServlet, Gene ...

  10. Hive的HQL(2)

    Hive基础(1) Hive的HQL(2) 1. HQL的数据定义,HQL是一种SQL方言,支持绝大部分SQL-92标准.但是和SQL的差异为:不支持行级别的操作,不支持事务等.HQL的语法接近于My ...