一、存储函数

  相当于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. css布局全总结

    一  居 中 布 局 水平居中 1. 使用inline-block+text-align(1)原理.用法 原理:先将子框由块级元素改变为行内块元素,再通过设置行内块元素居中以达到水平居中. 用法:对子 ...

  2. [Android]进程间通信的方法

    一.管道 管道是进程间通信中最古老的方式,它包括 无名管道 和 有名管道两种,前者用于父进程和子进程间的通信,后者用于运行于同一台机器上的任意两个进程间的通信. 无名管道由pipe()函数创建. #i ...

  3. 洛谷P2664 树上游戏

    https://www.luogu.org/problemnew/show/P2664 #include<cstdio> #include<algorithm> #includ ...

  4. Linux上常用命令整理(一)—— cat

    近几个月刚从windows上转过来,开始慢慢熟悉linux,先不撕比到底哪个更好,首先要怀着相互借鉴的精神去了解各个平台. Linux上做开发,除去使用文本编辑器做开发的大神之外,大家(包括我这种菜鸟 ...

  5. [PHP] – 性能优化 – Fcgi进程及PHP解析优化

    https://www.abcdocker.com/abcdocker/808------[PHP] – 性能优化 – Fcgi进程及PHP解析优化

  6. 使用centos7的wall防火墙可能存在失效问题

    centos7有自己新的防火墙,但是仍然带有centos6.5的iptable防火墙,当新防火墙不稳定,失效时,可以采用老防火墙 以上都是在vm虚拟机上发现的问题 参考文章 https://www.c ...

  7. JS正则改变字符之间文字

    var reg = /([[^[]*])/g; html = html.replace(reg, "<span class=\"bold\">$1</s ...

  8. ThreadLocal(关于struts2的ThreadLocal,实际上Jdk1.2就有了)

    ThreadLocal是通过在不同线程中操作变量的副本,来达到线程安全的目的,是用空间资源换时间资源的方式.今天在看struts2源码的时候,发现ActionContext中,就持有一个静态的Thre ...

  9. 洛谷 P1203 [USACO1.1]坏掉的项链Broken Necklace

    坏掉的项链Broken Necklace 难度:★ Code: #include <iostream> #include <cstdio> #include <cstri ...

  10. 1068 乌龟棋 2010年NOIP全国联赛提高组

    1068 乌龟棋 2010年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Descrip ...