mysql-数据备份与存储过程

修改隔离级别

修改全局的  
 set global transaction isolation level read committed;
 或者:
 set @@tx_isolation = "asasasasas-read";
 修改局部
 set session transaction isolation level read committed;
 

 @@系统内置变量
 @表示用户自定义的变量

存储过程

什么是存储过程

是任意的sql语句的组合,被放到某一个存储过程中,类似于一个函数,有一个函数名/参数/还有函数体.

用来干什么

其中可以包含任何的sql语句,逻辑处理,事务处理,所有的我们学过的sql语句都可以放到里面

三种数据处理方式

  1. 应用程序只关注业务逻辑,所有与数据相关的逻辑封装到mysql中

    • 优点:应用程序要处理的事情变少了,可以减少网络传输
  2. 应用程序既要处理业务逻辑,还要编写sql语句

    • 优点:降低了沟通成本,人力成本
    • 缺点: 网络传输增加,sql语句编写非常复杂
  3. 通过ORM框架, 使用对象关系映射,自动生成sql语句并执行

    • 优点:不需要在编写sql语句,提升了开发效率
    • 缺点:不够灵活,应用程序开发者和数据库完全隔离,可能导致仅关注上层开发,而不清楚底层原理
# 语法
create procedure p_name(p_type p_name p_date_type)
begin
sql......
end

# p_type 参数的类型  in 输入   out 输出必须是一个变量,不能是值    inout 即可输出也可输入  
# p_name 参数的名字
# p_data_type  参数的数据类型  如  int  float

案例

delimiter |
create procedure a1(in a int, in b int, out c int) 
begin
set c = a + b;
end |
delimiter ;

# 调用
set @res =0;
call a1(1,1,@res);
select * from @res;

# 删除
drop procedure 名称;

# 查看
show create procedure 名称

# 查看全部  例如 db库下的所有
select name from mysql.proc where db = 库名 and  type = "PROCEDURE";

delimiter |
create procedure transfer2(in aid int,in bid int,in m float,out res int)
begin 
	declare exit handler for sqlexception
	begin
		# 异常处理代码
		set res = 99;
		rollback;
	end;
	
	start transaction;
	update account set money = money - m where id = aid;
	update account set money = moneys + m where id = bid;
	commit;
	set res = 1;
end|
delimiter ;

备份与恢复

# 备份
mysqldump.exe   
mysqldump -u用户名 -p密码 数据库 表名1 表名2 .... > 文件路径....
# 注意 第一个表示数据库  后面全都是表名
mysqldump -uroot -p day41 student  > 


#备份多个数据库
mysqldump -uroot -p111 --databases day41 day40  > x3x.sql
#指定 --databases 后导出的文件包含 创建库的语句   而上面的方式不包含

#备份所有数据  
mysqldump -uroot -p111 --all-databases > all.sql


#自动备份
linux crontab 指令可以定时执行某一个指令



# 恢复数据:
没有登录mysql 
mysql < 文件的路径


已经登录了MySQL 
source  文件路径


注意: 如果导出的sql中没有包含选择数据库的语句 需要手动加上 
posted @ 2019-09-02 09:28  raynduan  阅读(2150)  评论(0编辑  收藏  举报