MySql——编程
基本语法形式
语句块模式:
在mysql编程中,begin....end;基本代替了原来编程语句中的{...}语法。
但又有所区别:
一个bigin...end;块,可以给定一个“标识符”,并且可以使用leave语句来“退出”该语句块。
基本流程控制语句:
if语句:
case语句:(类似php中的switch)
while循环语句:
mysql中的变量
变量它有一定的使用场景限制(其实包括前面的流程控制语句也这样):
在通常的执行各种create,insert,delete,update,select等语句的“环境”中,并不使用常规变量,也不能使用流程控制语句。
其实,这些语句只能在编程环境中用——通常的增删改查,可以称为命令环境。
编程环境:存储函数中,存储过程中,触发器中。
普通变量的声明语法:
declare 变量名 变量类型 [default 初始值]
变量的赋值语法:
set 变量名 = 变量值
mysql还有一种变量形式,可以称为“会话变量”
会话变量的形式为: @变量名;
会话变量无需单独声明,而是直接赋值就可以,类似php
会话变量的赋值: set 变量名 = 值;
会话变量可以在普通命令行环境中或编程环境中使用。
语法1:set 变量名 = 表达式;#此语法中的变量必须先使用declare声明
语法2:set @变量名 = 表达式; #此方式可以无需declare语法声明,而是直接赋值,类似php定义变量并赋值。
语法3:select @变量名 := 表达式;#此语句会给该变量赋值,同时还会作为一个select语句输出“结果集”。
语法4:select 表达式 into @变量名;#此语句虽然看起来是select语句,但其实并不输出“结果集”,而只是给变量赋值。
当然,也可以进行运算:
稍微总结一下:
有两种环境;
常规mysql命令环境,可以执行:增删改查。。。
编程环境:其实就是在特定的语句语法内部:存储过程内,存储函数内,触发器内。
两种变量:
普通变量:不带@符,直接写名字,必须先声明,后使用(赋值之类),只能用于编程环境
会话变量:带@符,无需声明,直接使用(先赋值),可以用于2种环境。
流程控制语句: 只能用于编程环境
存储函数
定义形式:
调用形式:
跟系统函数的调用形式一样,直接使用名字,并带括号,以及根据需要带实参。
比如:
select 3, now(), f1(); //f1为自定义的存储函数。
select 3, now(), f2(3, ‘abc’, @v1); //带3个实参,其中@v1是一个前面赋值了的变量。
举例:
先得改变语句结束符:
删除:drop function [if exists] 存储函数名;
存储过程
存储过程就是一个没有返回值数据值的“函数”。
虽然存储过程不返回单个数据值,但可以“返回”结果集——这里的返回起始就是select语句的正常结果表现。
定义形式:
其中,
in,out,inout用于修饰一个形参的“数据流向”:
in:只作为外部输入数据,调用环境传入存储过程内部,默认值。
out:只作为输出数据,即存储过程传出到调用环境。
inout:具有双重。
存储过程调用形式:
call 存储过程名(实参1,实参2,.....);
举例:
注:
实际,在php中,其实是这样:
$sql = “call pro1(8, 'dd') ”;
mysql_query( $sql );
删除:drop procedure [if exists] 存储过程名;
MySql——编程的更多相关文章
- Visual C++ 2008进行MySQL编程
visual c++ 2008进行MySQL编程(ODBC) -- (一) 套装安装 visual c++ 2008进行MySQL编程(ODBC) --(二) CDatabase操作数据库 visua ...
- MySQL编程基础
本文是关于MySQL编程中的一些基础知识,包括变量和运算符.常用语句.函数. 一.变量与运算符 1.用户会话变量声明:SET @变量名 = 表达式;//即:用户会话变量无需提前定义,直接用赋值语句赋值 ...
- C++ MySQL编程
MySQL编程需要包含<mysql.h>头文件.该文件一般在MySQL安装目录下的include文件夹下. 包含头文件还不够,还需要包含“libmysql.lib”库,一般在lib文件夹下 ...
- mysql 编程初步
mysql 编程 基本语法形式: 语句块模式 [begin_label] begin [statement_list] end [end_label]; label 标识符可以省略,但必须相同 流程控 ...
- visual c++ 2013进行MySQL编程(ODBC) -- (一) 套装安装
最近写了有些技术类文章了,只因为最近研究多了些东西,有一些项目用到了,所以自己记录一下,怕自己忘记,如果有哪位同学有自己的见解,可以邮件或者回复,技术类的探讨,不管对否,都是欢迎的. 操作之前,必须安 ...
- MySQL编程
MySQL 使用标准 SQL 检索和处理数据,体积小.开源.免费,易于快速部署.正是因为这些特点,使得其在互联网行业,特别是 Web 应用方面使用相当广泛.至今最新的版本已到 8.0. 一 基本操作 ...
- python入门编程之mysql编程
python关于mysql方面的连接编程 前提:引入mysql模块MySQLdb,即:MySQL_python-1.2.5-cp27-none-win_amd64.whl 如果要用线程池,则要引用模块 ...
- JAVA / MySql 编程——第八章 DAO 模式
1. 数据持久化:将程序中的数据在瞬时状态和持久状态间转换的机制即为数据持久化: 2. 持久化的实现方式:数据库.普通文件.XML文件: 3. JDBC封装: ...
- JAVA / MySql 编程——第七章 JDBC
1.JDBC:JDBA是Java数据库连接(Java DataBase Connectivity)技术的简称,提供连接各种常用数据库的能力: ●Java是通过JDBC技术实现对各种数据 ...
随机推荐
- ISO 18000-6c 访问标签--应用程序访问操作ISO 18000-6C标签的方法
标签访问操作包含三部分: 1.标签选择.某些场景,应用程序只对特定的标签进行操作,Indy Host Library可以指定标签选择条件. 2.执行盘存操作.上报单化后标签EPC区的数据. 3.标签单 ...
- RDS 在线DDL诡异报错ERROR 1062 (23000): Duplicate entry
RDS上执行报错如下: MySQL [ad_billing]> ALTER TABLE ad_spending ADD COLUMN impr bigint(20) NOT NULL DEFAU ...
- [置顶]
记最近一次Nodejs全栈开发经历
背景: 前段时间大部门下新成立了一个推广百度OCR.文字识别.图像识别等科技能力在金融领域应用的子部门.因为部门刚成立,基础设施和人力都是欠缺的.当时分到我们部门的任务是抽调一个人做新部门主站前端开发 ...
- ss-libev 源码解析udp篇 (4)
本篇分析remote_recv_cb,这是整个udp转发的反方向,即读取从后端发送过来的数据再发送给前端.对于ss-server,读取到的数据是目标地址的udp服务器发送回来的响应数据,ss-serv ...
- [GitHub] git push的时候报错 fatal: unable to access 'http://github.com/xxx/xxx.git/': Recv failure: Connection reset by peer
参考了两种方法: 1. 解决fatal: unable to connect to github.com问题 http://blog.csdn.net/greenqingqingws/article/ ...
- xgboost系列之应用xgboost的注意事项
问题:win和mac平台运行相同的xgboost代码,效果不同? 解决:xgboost的参数colsample_bytree设置为1.
- kubeadm搭建kubernetes集群之二:创建master节点
在上一章kubeadm搭建kubernetes集群之一:构建标准化镜像中我们用VMware安装了一个CentOS7虚拟机,并且打算用这个虚拟机的镜像文件作为后续整个kubernetes的标准化镜像,现 ...
- grub2 设置Windows为默认启动系统
1. 首先找到Windows的菜单menuentry.<blockquote># cat /boot/grub2/grub.cfg | grep Windows 结果: menuentry ...
- BZOJ4974:[Lydsy1708月赛]字符串大师(逆模拟KMP)
题目描述 一个串T是S的循环节,当且仅当存在正整数k,使得S是T k Tk (即T重复k次)的前缀,比如abcd是abcdabcdab的循环节.给定一个长度为n的仅由小写字符构成的字符串S,请对于每 ...
- BZOJ3489 A simple rmq problem 【可持久化树套树】*
BZOJ3489 A simple rmq problem Description 因为是OJ上的题,就简单点好了.给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过一 ...