MySQL (九)
1 代码执行结构
- 代码执行结构有三种:顺序结构、分支结构和循环结构。
1.1 分支结构
- 分支结构:实现准备多个代码块,按照条件选择性执行某段代码。
- 在MySQL中只有if分支。
- 基本语法
if 条件判断 then -- 满足条件要执行的代码 else if -- 不满足条件要执行的代码 else -- 不满足条件要执行的代码 end if;
- 触发器结合if分支:判断商品库存是否足够,不够不能生成订单。
-- 触发器结合if分支,判断商品库存是否足够,不够不能生成订单 DELIMITER $$ CREATE TRIGGER insert_before BEFORE INSERT ON `ORDER` FOR EACH ROW BEGIN -- 判断商品库存是否足够 -- 获取商品库存:商品库存在表中 SELECT inv FROM goods WHERE id = new.g_id INTO @inv; -- 比较kuc IF @inv < new.g_number THEN -- 库存不够 -- 触发器没有提供一个能够阻止事件发生的能力,只能暴力报错 INSERT INTO xxx VALUES(xxx); END IF; END $$ DELIMITER ;
1.2 循环结构
- 循环结构:某段代码在指定条件下执行。
- while循环
while 条件判断 do -- 满足条件要执行的代码 -- 变更循环条件 end while;
循环控制:在循环内部进行循环判断和控制 MySQL中没有对应的continue和break; iterate:类似于continue leave:类似于break
iterate和leave的使用方式: iterate/leave 循环名字;
-- 定义循环名字 循环名字:while 条件 do -- 循环体 -- 循环控制 end while;
2 函数
- 函数:将一段代码块封装到一个结构中,在需要执行代码块的时候,调用结构执行即可(代码复用)。
- 函数分为两类:系统函数和自定义函数。
2.1 系统函数
- 系统定义好的函数,直接调用即可。
- 任何函数都有返回值,因此函数的调用都是通过select调用。
- substring(str,offset,len):从offset(MySQL中的自妇产的下标是从1)开始,截取长度是len。
SET @cn = '世界你好'; SET @en = "hello world"; -- 字符串截取 ,),,);
- char_length:字符长度
- length:字节长度
SET @cn = '世界你好'; SET @en = "hello world"; -- 字符串长度 SELECT CHAR_LENGTH(@cn),CHAR_LENGTH(@en),LENGTH(@cn),LENGTH(@en);
- instr:判断字符串是否在某个字符串中存在,存在,返回位置;失败,返回0。
SET @cn = '世界你好'; SET @en = "hello world"; SELECT INSTR(@cn,'你');
SELECT INSTR(@cn,'哈哈');
- Lpad:左填充,将字符串按照某个指定的填充方式,填充到指定长度。
SET @cn = '世界你好'; SET @en = "hello world"; ,'呵呵');
- strcmp:compare,字符串比较,小,就返回-1;相等,就返回0;大,就返回1。
SET @a = 'hello'; SET @b = 'hei'; SET @c = 'HEI'; SELECT STRCMP(@a,@b),STRCMP(@b,@c),STRCMP(@c,@a);
2.2 自定义函数
- 函数要素:函数名,参数列表,返回值,函数体(作用域)。
- 创建函数
-- 创建函数 CREATE FUNCTION 函数名([形参列表]) RETURNS 数据类型 BEGIN -- 函数体 -- 返回值 RETURN 返回值(指定数据类型); END;
DELIMITER $$ CREATE FUNCTION dis() RETURNS INT BEGIN ; END $$ DELIMITER ;
- 自定义函数和系统函数调用方式是一样的。
SELECT dis();
2.3 查看函数
- 查看所有函数:
show function status [like 'pattern'];
- 查看创建函数语句
2.4 修改函数&删除函数
- 函数不可以修改,只能先删除,再新增函数。
- 删除函数的基本语句
drop function 函数名;
2.5 函数参数
- 函数分为两种:定义的参数叫形参,调用时的参数叫实参。
- 形参:必须指定数据类型
DELIMITER $$ CREATE FUNCTION 函数名 (形参名字 数据类型) RETURNS 数据类型 BEGIN -- 函数体 -- 返回值 RETURN 返回值; END; $$ DELIMITER ;
DELIMITER $$ CREATE FUNCTION res (num INT) RETURNS INT BEGIN ; ; WHILE @i <= num DO SET @sum = @sum + @i; ; END WHILE; RETURN @sum; END; $$ DELIMITER ;
);
- 在函数内部定义的@变量在函数外部也可以使用。
2.6 函数的作用域
- MySQL中的作用域与js中的作用域完全一样。
- 全局变量可以在任何地方使用;局部变量只能在函数内部使用。
- 全局变量:使用set关键字定义,使用@符号定义。
- 局部变量:使用declare关键字声明,没有@符号,所有的局部变量的声明,必须在函数体开始之前。
DELIMITER $$ CREATE FUNCTION res (num INT) RETURNS INT BEGIN ; ; WHILE i <= num DO SET SUM = SUM +i; ; END WHILE; RETURN SUM; END; $$ DELIMITER ;
3 存储过程
- 存储过程:简称过程,procedure,是一种用来处理数据的方式。
- 存储过程是一个没有返回值的函数。
3.1 创建存储过程
- 基本语法
DELIMITER $$ CREATE PROCEDURE 过程名字([参数列表]) BEGIN -- 过程体 END $$ DELIMITER ;
DELIMITER $$ CREATE PROCEDURE proe() BEGIN -- 过程体 SELECT * FROM my_account; END $$ DELIMITER ;
3.2 查看存储过程
- 函数的查看方式完全使用与存储过程。
- 查看所有的存储过程。
- show procedure status [like 'pattern'];
SHOW PROCEDURE STATUS;
- 查看创建过程语句
- show create procedure 存储过程名字;
3.3 调用过程
- 因为存储过程是没有返回值的,所以不能使用select关键字。
- 调用存储过程,使用call关键字。
call 存储过程的名字;
CALL proe();
3.4 修改过程&删除过程
- 存储过程不可以修改,只能先删除,再新增存储过后才能。
- 删除存储过程
drop 存储过程的名字;
3.5 存储过程参数类型
- 函数的参数需要数据类型指定,过程比函数更严格。
- 过程还有自己的类型限定:三种类型
- ① in:数据从外部传入给内部使用(值传递):可以是数值也可以是变量
- ②out:只允许过程内部使用(不用外部数据),给外部使用的(引用传递,外部的数据会被先清空才进入内部),只能是变量。
- ③inout:外部的可以在内部使用,内部修改也可以给外部使用,典型的引用传递,只能传递变量。
- 基本语法
DELIMITER $$ CREATE PROCEDURE 过程名 (IN 形参名称 数据类型,OUT 形参名称 数据类型,INOUT 形参名称 数据类型) BEGIN -- 过程体 END; $$ DELIMITER ;
DELIMITER $$ CREATE PROCEDURE pro1 (IN int_1 INT,OUT int_2 INT,INOUT int_3 INT) BEGIN -- 过程体 SELECT INT_1,INT_2,INT_3; END; $$ DELIMITER ;
- 调用:out和inout类型的参数必须传入变量,而不是是数值。
; ; ; SELECT @int_1,@int_2,@int_3; CALL pro1(@int_1,@int_2,@int_3); SELECT @int_1,@int_2,@int_3;
MySQL (九)的更多相关文章
- mysql九大类常用函数
一.数学函数 ABS(x) 返回x的绝对值BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制)CEILING(x) 返回大于x的最小整数值EXP(x) 返回值e(自然对数的底)的x次方 ...
- MySQL九读书笔记 字符串模式匹配
当我们使用查询,条件常常会遇到模糊查询.的模糊查询相关的字符串模式匹配. 这里,主要约两:标准SQL模式匹配.扩展正则表达式模式匹配. 一.标准的SQL模式匹配 SQL的模式匹配同意你使用&q ...
- Mysql(九):Python连接MySQL数据库之pymysql模块使用
Python3连接MySQL 本文介绍Python3连接MySQL的第三方库--PyMySQL的基本使用. PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服 ...
- 安装MySQL总结
由于MySQL的版本不同,所以会有不同的安装方式.在下以Linux系统下MySQL5.1.19版本为例,进行安装,初学还望指正. 一.安装编译软件(简单的yum安装) gcc gcc-c++ ncur ...
- phpstudy升级mysql数据库
因为MySQL支持全文索引的只有5.6以上,而我下的phpstudy只有5.5的版本,在导入数据库的时候因为该数据库的表内有使用全文索引,因此必须升级phpstudy的mysql版本,这里就把自己当升 ...
- Mysql第一周
前言:好久不见,我又来写博客拉.上个月只写了几篇django-rest-framework的,而且还是根据官网的英文写的.干货不多,内心还是有点羞耻的…… 简单说下我11月去干嘛了.11月初美图给我发 ...
- Linux安装mysql(Redhat6.5+MySQL5.7)(转载+原创补漏)
一.下载 这里我创建了一目录software用于存放我们待会要下载的mysql包,先去到该目录 命令:cd /software命令:wget http://mirrors.sohu.com/mysql ...
- centos7下使用mysql离线安装包安装mysql5.7
服务器环境: centos7 x64 需要安装mysql5.7+ 一.卸载CentOS7系统自带mariadb # 查看系统自带的Mariadb [root@CDH-141 ~]# rpm -qa|g ...
- MySql安装和基本管理
一.什么是数据库? mysql就是一个基于socket编写的C/S架构的软件 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流 ...
- linux安装mysql全纪录[包括yum和rpm安装,编码,远程连接以及大小写问题]
linux安装mysql全纪录[包括yum和rpm安装,编码,远程连接以及大小写问题] 一.查看mysql是否已经安装 使用“whereis mysql”命令来查看mysql安装路径: [root@h ...
随机推荐
- HDU 1814 Peaceful Commission / HIT 1917 Peaceful Commission /CJOJ 1288 和平委员会(2-sat模板题)
HDU 1814 Peaceful Commission / HIT 1917 Peaceful Commission /CJOJ 1288 和平委员会(2-sat模板题) Description T ...
- Android - Daydream 互动屏保
Android Daydream 互动屏保 API19 API23 Create:2016-03-01 继承DreamService来实现一个自定义屏保 Dreams是当充电的设备空闲,或者插入底座时 ...
- 自然饱和度(Vibrance)算法的模拟实现及其SSE优化(附源码,可作为SSE图像入门,Vibrance算法也可用于简单的肤色调整)。
Vibrance这个单词搜索翻译一般振动,抖动或者是响亮.活力,但是官方的词汇里还从来未出现过自然饱和度这个词,也不知道当时的Adobe中文翻译人员怎么会这样处理.但是我们看看PS对这个功能的解释: ...
- Spring mybatis源码篇章-MybatisDAO文件解析(二)
前言:通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-MybatisDAO文件解析(一) 默认加载mybatis主文件方式 XMLConfigBuilder ...
- centos7启动过程及systemd祥细说明
开机启过程 POST->BOOT SEQUENCE-> BOOTLOADER->KERNEL + INITRAMFS(INITRD)->ROOTFS->/sbin/ini ...
- 【整理】01. jQuery.Form.js 用法分析
前言: 为什么使用JQuery.From.js,因为原生<form>表单没有回调函数,不过可以通过jquery-form.js这个插件来实现回调函数. jQuery.form.js是一个f ...
- 消息队列NetMQ 原理分析5-StreamEngine、Encord和Decord
消息队列NetMQ 原理分析5-StreamEngine,Encord和Decord 前言 介绍 目的 StreamEngine 发送数据 接收数据 流程分析 Encoder V2Encoder V1 ...
- 1059. C语言竞赛
C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛.既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽: 冠军将赢得一份"神秘大奖"(比如很巨大的一本学生研究论文集--). 排名为 ...
- Abp(.NetCore)开发与发布过程3-部署Ubuntu站点
以下是笔者在 Ubuntu 16.0-64bit 环境下 发布 ABP(.NetCore)的全过程.特此记录,希望对大家有所帮助. 准备的工具 1.PuTTY(ssh,如果不想每次都用阿里云的远程登录 ...
- swift3.0 对UITextField()输入框输入的内容进行监控
首先需要继承 UITextFieldDelegate class TestViewController: UIViewController,UITextFieldDelegate{ } 添加事件委托 ...