网站首页 > 基础教程 正文
mysql编程
mysql编程中语句块包含符:
其实就是相当于js或php中大括号语法:
[标识符:]begin
//语句。。。。
end [标识符];
标识符就是定义定义的任意的名字而已,比如:
if (条件判断)
begin
//。。。。
end;
end if;
if (条件判断)
A:begin
//。。。。
end A;
end if;
A就是标识符,它的作用是“标识”该语句块,以期可以在该语句块中“使用它”——其实就是退出;
流程控制语句
if语句:
case语句:
相当于之前的switch,它有两种语法:
语法1示意代码:
case @v1
when 1 then //如果@v1 等于 1,则表示满足条件,进入这个分支;
begin
//.......
end;
when 2 then
begin
//........
end;
else
begin
//......
end;
end case;
说明:
@v1表示一个变量;后面都这样。
语法2示意代码:
case
when @v1 > 0 then //如果该条件满足,就执行这个分支,否则就继续判断下一个条件。。。
begin
//......
end;
when @v1 < 0 then
begin
//.....
end;
else
begin
//......
end;
end case;
loop循环语句
标识符:loop
begin
//这里就是循环的语句块。。。
//注意:这里必须有一个“退出循环”的逻辑机制;否则该循环就是死循环,其基本形式类似这样:
if (条件) then
leave 标识符; //退出;
end if;
end;
end loop 标识符
while 循环
举例:
set @v1 = 1; //赋值语句;
while @v1 < 10 do
begin
insert into tab1 (id, num) values ( null, @v1 );
set @v1 = @v1 + 1;
end;
end while;
repeat 循环
举例:
set @v1 = 1; //赋值语句;
repeat
begin
insert into tab1 (id, num) values ( null, @v1 );
set @v1 = @v1 + 1;
end;
until @v1 >= 10
end repeat;
leave语句:
语法:
leave 标识符;
作用:
用来退出begin...end结构或其他具有标识符的结构。
mysql中的变量:
mysql中,有两种变量形式:
普通变量: 不带“@”符号;
定义形式:
declare 变量名 类型名 【default 默认值】; //普通变量必须先这样定义
赋值形式:
set 变量名 = 值;
取值:就直接使用变量名;
使用“场所”:只能在“编程环境”中使用;
什么是编程环境?只有3个:
1,定义函数的内部;
2,定义存储过程的内部;
3,定义触发器的内部;
会话变量: 带“@”符号;
定义形式(其实也是赋值形式):
set @变量名 = 值; //跟php类似,无需定义,直接赋值,第一次就算是定义
取值:就直接使用变量名;
使用“场所”:基本上哪里都可以用;
变量赋值有如下形式:
语法1(针对普通变量):
set 变量名 = 表达式;#此语法中的变量必须先使用declare声明
语法2(针对会话变量):
set @变量名 = 表达式; #此方式可以无需declare语法声明,而是直接赋值,类似php定义变量并赋值。
语法3(针对会话变量):
select @变量名 := 表达式;#此语句会给该变量赋值,同时还会作为一个select语句输出“结果集”。
语法4(针对会话变量):
select 表达式 into @变量名;#此语句虽然看起来是select语句,但其实并不输出“结果集”,而只是给变量赋值。
(存储)函数:
函数,也说成“存储函数”,其实就是js或php中所说的函数!
唯一的区别:
这里的函数必须返回一个数据(值);
定义形式:
注意事项:
1, 在函数内容,可以有各种变量和流程控制的使用;
2, 在函数内部,也可以有各种增删改语句;
3, 在函数内部,不可以有select或其他“返回结果集”的查询类语句;
举例:
调用形式:
跟调用内部函数一样!比如:
select now(), 8+3 as f2, func1(); //这里,now()是系统函数; func1()是自定义函数。
或如果在编程语句中:
set @v1 = now();
set @v2 = func1();
删除函数:
drop function 函数名;
存储过程procedure
存储过程,其本质还是函数——但其规定:不能有返回值;
定义形式:
说明:
1,in:用于设定该变量是用来“接收实参数据”的,即“传入”;默认不写,就是in
2,out:用于设定该变量是用来“存储存储过程中的数据”的,即“传出”,即函数中必须对他赋值;
3,inout:是in和out的结合,具有双向作用;
4,对于,out和inout设定,对应的实参,就“必须”是一个变量,因为该变量是用于“接收传出数据”;
调用存储过程:
call 存储过程名 (实参1,实参2,.... )
它应该是在“非编程环境中”调用,即执行增删改查的场景下;
举例:
#创建一个存储过程:
#该存储过程的目标是:将3个数据写入到表tab_int;
#并返回该表的第一个字段的前3大值的行
调用:
删除存储过程:
drop procedure 存储过程名;
在php中使用存储函数或存储过程的示意
<php
//调用存储函数:
$v1 = $_POST[‘a’];
$v2 = $_POST[‘b’];
$sql = “insert into tab1 (id, f2, f3) values ( null, now(), func1($v1 , $v2 ) )”;
$result = mysql_query($sql);
//调用存储过程:
$v1 = $_POST[‘username’];
$v2 = $_POST[‘pass’];
$v3 = $_POST[‘age’];
$sql = “ call insert_user($v1, $v2, $v3 ); ”; //insert_user()是一个存储过程,带3个参数,会将该3个参数数据写入(insert)某个表中。
$result = mysql_query();
另一个使用存储过程返回结果集的例子:
$id = $_GET[‘id’];
$sql = “call Get_User_Info( $id ) “; //Get_User_Info()是一个存储过程,其中会返回某个指定id的用户信息
$result = mysql_query($sql); //这里得到的就是“结果集”了
?>
触发器(trigger)
含义:
触发器,也是一段预先定义好的编程代码(跟存储过程和存储函数一样),并有个名字。
但:
它不能调用,而是,在某个表发生某个事件(增,删,改)的时候,会自动“触发”而调用起来。
定义形式:
create trigger 触发器名 触发时机 触发事件 on 表名 for each row as
begin
//这里,才是编程的位置,也就是触发器的内部语句
end;
说明:
1,触发时机,只有2个: before(在....之前), after(在....之后);
2,触发事件,只有3个:insert, update, delete
3,即其含义是:在某个表上进行insert(或update,或delete)之前(或之后),会去执行其中写好的代码(语句);即每个表只有6个情形会可能调用该触发器;
4,通常,触发器用于在对某个表进行增删改操作的时候,需要同时去做另外一件事情的情形;
5,在触发器的内部,有2个关键字代表某种特定的含义,可以用于获取有关数据:
new:它代表当前正要执行的insert或update的时候的“新行”数据;通过它,可以获取这一新行数据的任意一个字段的值,形式为:
set @v1 = new.id; //获得该新插入或update行的id字段的值(前提是有该id)
set @v2 = new.age; //同上;
old:它代表当前正要执行的delete的时候的“旧行”数据,通过它,可以获取这一旧行数据的任意一个字段的值,形式为:
set @v1 = old.id; //获得该新插入或update行的id字段的值(前提是有该id)
set @v2 = old.age; //同上;
- 上一篇: MySQL 从入门到精通(四)之索引结构
- 下一篇: MySQL数据库入门(四)数据类型简介
猜你喜欢
- 2025-05-10 「工具」三步搞定数据库MySQL卸载
- 2025-05-10 Mysql数据库入门到精通(mysql从入门到精通pdf)
- 2025-05-10 【深入浅出MySQL】「底层原理」InnoDB原理带你从入门到精通
- 2025-05-10 PHP MySQLi基础教程 MySQL 创建数据库
- 2025-05-10 在Windows环境下MySQL命令行备份还原数据库图文教程
- 2025-05-10 PHP和MySQL命令行初级教程(php mysqli)
- 2025-05-10 新手教程系列之《Mysql5.5 Windows10安装》
- 2025-05-10 面试官:MySQL索引底层数据结构原理与性能调优,你能回答多少?
- 2025-05-10 「Qt入门第22篇」 数据库(二)编译MySQL数据库驱动
- 2025-05-10 20《MySQL 教程》UNION 联合查询(mysql联合查询效率)
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- deletesql (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)