更多MySQL的操作
1 触发器的使用
1.1 基本格式
delimiter // # 修改结束符为//
create trigger trigger_name {t_time} {t_order} on table_1 for each row
begin
{执行命令,可以多行}
end //
delimiter ;
- t_time:执行命令在触发条件的前面运行还是后面运行,有:before,after。
- t_order:对表table_1执行什么操作为触发条件,有:insert,update,drop。
1.2 变化的执行命令
# 例:
# 创建
delimiter // # 修改结束符为//
create trigger trigger_name after insert on table_1 for each row
begin
insert into table_2(col) values (new.col_1);
end //
delimiter ;
# 使用
insert into table_1(col_1) values (2);
- 结果是在table_1的col_1中插入了数据2,在table_2的col也插入了数据2
- new:这个获取的是动态的数据,有new,old(多行 )
new:是新添加的数据,作用范围是insert,update
old:是旧的数据,作用范围是drop,update
2 函数
2.1 内置函数
2.1.1 使用
select {内置函数};
2.2 自定义函数
# 定义函数
delimiter // # 修改结束符为//
create function
f1(data1 int,
data2 char)
return int # 设置输入参数以及返回参数
begin
declare num1 int; # 定义变量以及类型
declare num1 int default 0; # 定义变量以及初始化变量
set num2=1+2; # 计算操作
return(num) # 返回数据
end //
delimiter ;
# 使用函数
select f1(5, 's');
3 存储过程
存储过程与函数的区别在于,函数只对参数进行运算,存储过程可以使用SQL语句
3.1 使用
delimiter // # 修改结束符为//
create procedure
p(in v1 int, # 只能输入使用
out v2 int, # 只能输出
inout v3 int) # 两者皆可
begin
set v2=123; # 设置输出的数据,只能是out、inout
select * from table_name where id=v1; # 使用输入参数,只能是in、inout
end //
delimiter ;
# 使用及传入参数
set @v2=222;
set @v3=333;
call p(1,v2,v3); # 没有参数也需要括号
select @v2;
3.2 事务操作
delimiter // # 修改结束符为//
create procedure
p(out flag int)
begin
declare exit handler for sqlexception
begin
set flag=0; # 操作失败返回
rollback;
end;
start transaction;
# 执行的操作
commit;
set flag=1; # 操作完成返回
end //
delimiter ;
3.3 语句
3.3.1 判断语句
- if…then…else if…end if
delimiter // # 修改结束符为//
create procedure
p(in v1 int)
begin
if /*条件*/ then
# 语句1;
else
# 语句2;
end if;
end //
delimiter ;
- case…when…then…else…end case
delimiter // # 修改结束符为//
create procedure
p(in v1 int)
begin
case # v1 变量
when 1 then
# 语句1;
when 2 then
# 语句2;
else
# 语句3;
end case;
end //
delimiter ;
3.3.2 循环语句
- while…do…end while
delimiter // # 修改结束符为//
create procedure
p(in v1 int)
begin
while /*条件*/ do
# 语句;
end while;
end //
delimiter ;
- repeat…until…end repeat
delimiter // # 修改结束符为//
create procedure
p(in v1 int)
begin
repeat
# 语句;
until # 条件
end repeat;
end //
delimiter ;
- loop…end loop
delimiter // # 修改结束符为//
create procedure
p(in v1 int)
begin
loop_name:loop
# 语句;
if 结束条件 then
leave loop_name;
end if;
end loop;
end //
delimiter ;
- 游标迭代
delimiter // # 修改结束符为//
create procedure
p()
begin
declare v1 int; # 变量1
declare v2 char(10); # 变量2
declare flag int default False; # 结束标志
declare cursor_name cursor from select data1,data2 from table_name; # 定义游标
declare continue handler for not found set flag=True;
open cursor_name; # 使用游标
loop_name:loop
fetch cursor_name into v1,v2;
# 操作
if flag then
leave loop_name;
end if;
end loop;
close cursor_name;
end //
delimiter ;
3.3 动态执行MySQL语句
delimiter // # 修改结束符为//
create procedure
p(in v1 int)
begin
set @data1 = v1;
prepare order_name from "select v1 from table_name where v1=?";
execute order_name using @data1;
deallocate prepare order_name;
end //
delimiter ;
本文地址:https://blog.csdn.net/qq_35560000/article/details/107540020