TPL事务

TPL事务

概念

事务是数据库中一系列操作数据的动作集合!事务有着高度的一致性!

要么全部执行,要么不执行,是一个不可分割的工作单位。

事务的类型

  1. ​ 自动事务

    MySQL默认就是自动提交事务!每句SQL语句前后都会嵌套事务!

    自动开启!自动提交!报错自动回滚!

  2. ​ 显式事务(自定义事务)

    方案1:手动开启

    start transaction
    DMLSQL语句序列			 
    commit/rollback 
    

    方案2:取消自动事务

    set  autocommit = off / 1; 关闭自动提交 本次窗口有效 		
    DMLSQL语句序列		  
    commit/rollback
    

注意:rollback会回滚开启事务之前的状态!commit以后SQL语句会真正的改变数据!

事务的作用

1)为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
2)当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。

事务的特性

  • 原子性(Atomicity):指处于同一个事务中的多条语句是不可分割的。
  • 一致性(Consistency)
  • :事务必须使数据库从一个一致性状态变换到另外一个一致性状态。比如转账,转账前两个账户余额之和为2k,转账之后也应该是2K。
  • 隔离性(Isolation):指多线程环境下,一个线程中的事务不能被其他线程中的事务打扰
  • 持久性(Dutability):事务一旦提交,就应该被永久保存起来。

如果不考虑事务的隔离性,会出现以下问题:

  • 脏读:指一个线程中的事务读取到了另外一个线程中未提交的数据。
  • 不可重复读:指一个线程中的事务读取到了另外一个线程中提交的update的数据。
  • 幻读(虚读):指一个线程中的事务读取到了另外一个线程中提交的insert的数据。

事务的隔离级别

  1. READ UNCOMMITTED(未提交读): 赃读. 重复读、虚读都有可能发生。
  2. READ COMMITTED(已提交读): 避免赃读。重复读、虚读有可能发生。(oracle默认的)
  3. REPEATABLE READ(可重复读):避免赃读、重复读。虚读有可能发生。(mysql默认)
  4. SERIALIZABLE(可串行化): 避免赃读、不可重复读、虚读。

级别越高,数据越安全,但性能越低!!

查看隔离级别

-- 模糊查询
show variables like '%isolation%';
-- 隔离名查询 MYSQL-80版本的名字与之前的名字不同,之前的名字为@@tx_isolation
select @@transaction_isolation;

修改隔离级别

set transaction isolation level 四个级别;

DCL权限管理

创建用户

CREATE USER `zhangsan` identified BY '123';

用户赋权

grant 权限(all/select..) on 库名.表名(*全部) to '用户名'

查看权限

show grants for '账号'

用户权限撤销

revoke  权限 on 库.表 from ‘用户名’;  	

删除用户

drop user '用户名'

数据备份和恢复

数据备份

mysqldump -u用户名 -p密码 要备份的数据库>磁盘位置.sql

数据恢复

mysql -u用户名 -p密码 要恢复的数据库<磁盘位置 .sql

猜你喜欢

转载自www.cnblogs.com/MonkeySun/p/13374850.html