事务
- 概述:若一个包含多个步骤的业务操作被事务管理,那么这些操作要么同时成功,要么同时失败。
- 操作流程:
- 开启事务:
start transaction;
- 回滚:
rollback;
- 提交:
commit;
- 开启事务:
- 事务提交方式
- 自动提交:一条DML增删改语句会自动提交一次事务,MySQL属于自动提交
- 手动提交:即上面的操作流程,Oracle默认手动
- 修改默认提交方式:
- 查看:
select @@commit;
#0代表手动提交,1代表自动 - 设置:
set @@commit = 0/1;
- 查看:
- 事务的四大特性
- 原子性:是不可分割的最小操作单位,即同时成功或失败
- 持久性:当事务提交或回滚后,数据库会持久化的保存数据
- 隔离性:多个事务之间相互独立
- 一致性:事务操作前后,数据总量不变
- 事务隔离级别
- 存在问题
- 脏读:一个事务读取到另外一个事务中没有提交的数据
- 虚读(不可重复读):在同一事务中,两次读取到的数据不一致
- 幻读:一个事务操作(DML)数据,另外一个事务中添加了一条数据,则前者查询不到自己的修改(MySQL中不存在)
- 级别分类
read uncommited
:读未提交,会导致脏读、虚读和幻读,如转账后不提交事务,等对方确认后再回滚引发安全问题read commited
:读已提交,Oracle默认,会导致虚读和幻读,对方提交后转账记录改变repeatable read
:可重复读,MySQL默认,会导致幻读,自己提交后方可查询到变化serializable
:串行化,可解决所有问题,一个事务操作时锁住其他事务,对方提交后方可进行查询等操作
-
- 注意:隔离级别从小到大安全性越来越高,但效率降低
- 查询级别:
select @@tx_isolation;
- 设置级别:
set global transaction isolation level 级别字符串
- 存在问题
用户管理
-
添加用户:
creat user '用户名'@'主机名' identified by '密码';
-
删除用户:
drop user '用户名'@'主机名';
-
查询用户:
- 切换到mysql数据库
- 查询user表,通配符表示可以在任意主机使用该用户登录数据库
-
修改用户密码:
set password for '用户名'@'主机名' = password('新密码');
若忘记了root用户密码,无验证启动:
mysql --skip-grant-tables
,步骤略注意:本机的root用户为超级管理员,所有主机名不要设
%
,并且别让他人在你电脑上操作数据库!
权限管理
- 查询权限:
show grants for '用户名'@'主机名';
- 授予权限:
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
#all
为权限通配符 - 撤销权限:
revoke 权限列表 from 数据库名.表名 to '用户名'@'主机名';
MySQL完结撒花