欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

更多MySQL的操作

程序员文章站 2022-03-03 20:00:55
MySQL的操作1 触发器的使用1.1 基本格式delimiter //# 修改结束符为//create trigger trigger_name {t_time} {t_order} on table_1 for each rowbegin{执行命令,可以多行}end //delimiter ;t_time:执行命令在触发条件的前面运行还是后面运行,有:before,after。t_order:对表table_1执行什么操作为触发条件,有:insert,update,drop。...

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

相关标签: # MySQL 数据库