更多MySQL的操作

更多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

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐