基于Mysql的编程语言(实验六、七)
阅读原文时间:2023年07月08日阅读:1

本文参考1:MYSQL对sql的拓展

本文参考2:MySQL编程基础

本文参考3:MySql数据库编程

(侵删)

一.变量的定义

1.用户变量

set @变量名=表达式;

说明:无提前进行定义,直接用赋值语句赋值,就算是定义了,也可以用select赋值语句赋值

2.系统变量

set @@系统变量名(=值)

3.局部变量声明

declare 变量名 数据类型;

说明:必须指明类型,生命周期:定义局部变量的小范围

二.语句

1.赋值语句

(1)set语句

set 变量 = 表达式

(2)select语句

select 表达式 into 变量;//不产生结果集
select 变量 := 表达式;//产生结果集

(3)同时给多个变量赋值,用逗号隔开。

set 变量1 = 表达式1,变量2 = 表达式2,……

说明:当你想显示结果集的时候,直接用select+变量名即可在输出区显示出结果集

eg:

2.重置命令结束标记

delimiter 结束标记;

说明:由于MySQL客户机的默认结束标记和语句的结束标记相同,都是分号,所以在写语句块的时候,为避免语句块被;拆开,应在语句块前重设客户机结束标志,然后在语句块结束后改为原样

DELIMITER $$ //将客户机结束标记改为$$
BEGIN
要执行的功能代码;
END;
$$
DELIMITER ; //将客户机结束标记改回;

3.begin-end语句块:将功能封装到存储过程、函数、触发器、事件等存储程序内部。

4.条件控制语句

(1)if语句

IF 条件 THEN 语句块;
ELSE IF 条件 THEN 语句块;
……
ELSE 语句块;
END IF;

(2)case语句

CASE 表达式
WHEN 值1 THEN 语句块;
WHEN 值2 THEN 语句块;
……
ELSE 语句块;
END CASE;

5.循环语句

(1)while-do语句

WHILE 条件表达式 DO //继续循环的条件
循环体;
END WHILE;

(2)repete-until语句

REPEAT
循环体;
UNTIL 条件表达式 //跳出循环的条件
END REPEAT;

(3)loop语句

循环标签:LOOP
循环体;
IF 条件表达式 THEN LEAVE 循环标签; //跳出循环的条件
END IF;
END LOOP;

三、存储过程

1.介绍

存储过程是一种命名PL/SQL块,是为了完成某种特定功能的PL/SQL的语句集。存储过程有名字,编译后长期存储在数据库中,通过存储过程的名字和参数调用它,存储过程可以多次反复执行,效率高。

2.创建存储过程

(1)声明分割符

一定注意上述分割符的使用,MySQL默认以“;”为分割符,如果没有进行分割符的声明,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以事先要用delimiter关键字声明当前段的分割符。用完了以后要记得还原

(2)格式

样例:

delimiter &&
create procedure demo(inout p_in int)
begin
select p_in;
set p_in=2;
select p_in;
end;
&&
delimiter ;

说明:在命令行的执行过程中,select可以显示变量选择变量,set就是对变量进行赋值,可以在最左边的栏中见到新建立的存储过程,并且可以直接调用执行

set @p_in=1;
call demo(@p_in);

结果显示:

(3)变量的定义declare

declare l_int int unsigned default 40000;
declare l_num number(8,2) default 9.95;
declare l_date date default '1999-12-31';
declare l_datetime datetime default '1999-12-31 23:59:59';
declare l_varchar varchar(255) default 'This will not be padded';

(4)用户变量

select 'hello world' into @x;
select @x;

显示结果:

(5)样例

-- 从1到100的数字之和
delimiter *
create procedure kaka(out count int)
begin
declare v1 int(11) default 1;
declare v2 int(11) default 0;
while v1 < 100 do
set v2 = v2 + v1;
set v1 = v1 + 1;
end while;
set count = v2;
end;
call kaka(@count);
select @count;
*
delimiter

四、函数

1.自定义函数及其调用

DELIMITER $$
CREATE FUNCTION 函数名(参数1,参数2,…) RETURNS 返回值类型
[函数选项]
BEGIN
函数体;
RETURN 返回值;
END;
$$
DELIMITER ;

样例:

delimiter &&
create function sum(a int,b int)returns int
begin
declare c int;
set c=a+b;
return c;
end;
&&
delimiter ;

调用:

set @a=2,@b=3;
set @c=`test`.`sum`(@a, @b);
select @c;

输出:

说明:函数的修改用alter,函数的删除用drop