一、存储函数

  相当于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的阶乘
    1. create function factorial_gao(num int)
    2. returns int
    3. begin
    4. declare n int default 1;
    5. declare fac int default 1;
    6. while n <=num do
    7. set fac = fac*n;
    8. set n = n+1;
    9. end while;
    10. return fac;
    11. 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(存款)中添加新数据
    1. create procedure insertRec(acc varchar(20), des float)
    2. begin
    3. insert into saving(account, deposit) values(acc, des);
    4. 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:

     定义触发器:

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

     表test添加新数据:

  1. mysql> insert into test(title,content, num)values('sixth', 'this is the sixth data.', 525.20)$
  2. 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. c# 可选参数与命名实参

    c#4.0: 链接:C# 可选参数 命名参数

  2. Hive进阶_内置函数

    Hive数学函数 round : 四舍五入 ceil : 向下取整 floor : 向上取整 ),),),),); Hive字符函数 select lower('Hello World'), uppe ...

  3. arcgis python 保存当前窗口图形为jpg

    1,第一步打开arcgis 将图形加载进去 第二步,将要保存的图形调到合适的比例尺,然后点击下面按钮 第三步,将写好的python 语句放到里面去: import arcpy mxd = arcpy. ...

  4. Class 学习 (Es6阮一峰)

    es5 构造函数 实例: function Point(x, y) { this.x = x; this.y = y; } Point.prototype.toString = function () ...

  5. 获取url的参数值

    var url=location.search; //获取url中从?开始的所有字符 var  theRequest=new Object();//定义一个对象来存放url中的参数 if( url.i ...

  6. Android 适配底部返回键等虚拟键盘的完美解决方案

    这个问题来来回回困扰了我很久,一直没能妥善解决. 场景1:华为手机遮挡了屏幕底部. 场景2:进入应用时,虚拟键自动缩回,留下空白区域. 需求: 需要安卓能自适应底部虚拟按键,用户隐藏虚拟按键时应用要占 ...

  7. socket tcp使用recv接收数据时,返回errno错误代码88

    原因:就是recv函数的第一个参数不是可用的,也就是第一个参数不是建立连接时返回的文件描述符. 解决方法:xxx

  8. LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例

    题目描述 一共有 nnn个数,第 iii 个数 xix_ix​i​​ 可以取 [ai,bi][a_i , b_i][a​i​​,b​i​​] 中任意值.设 S=∑xi2S = \sum{{x_i}^2 ...

  9. 【Python图像特征的音乐序列生成】关于mingus一个bug的修复,兼改进情感模型

    mingus在输出midi文件的时候,使用这样的函数: from mingus.containers import NoteContainer from mingus.midi import midi ...

  10. Python3获取大量电影信息:调用API

    实验室这段时间要采集电影的信息,给出了一个很大的数据集,数据集包含了4000多个电影名,需要我写一个爬虫来爬取电影名对应的电影信息. 其实在实际运作中,根本就不需要爬虫,只需要一点简单的Python基 ...