TPL事务
概念
事务是数据库中一系列操作数据的动作集合!事务有着高度的一致性!
要么全部执行,要么不执行,是一个不可分割的工作单位。
事务的类型
-
自动事务
MySQL默认就是自动提交事务!每句SQL语句前后都会嵌套事务!
自动开启!自动提交!报错自动回滚!
-
显式事务(自定义事务)
方案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
的数据。
事务的隔离级别
- READ UNCOMMITTED(未提交读): 赃读. 重复读、虚读都有可能发生。
- READ COMMITTED(已提交读): 避免赃读。重复读、虚读有可能发生。(oracle默认的)
- REPEATABLE READ(可重复读):避免赃读、重复读。虚读有可能发生。(mysql默认)
- 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