当前位置:网站首页>[MySQL] Mysql transaction and authority management
[MySQL] Mysql transaction and authority management
2022-07-30 22:31:00 【dream new come out】
引言
铭记于心 | ||
---|---|---|
我唯一知道的,便是我一无所知 |
事务(TCL)
事务的概述
概念
保证事务中的所有操作都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式.当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久地保存下来;要么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初状态.
事务的原理
事务开启之后, 所有的操作都会临时保存到事务日志, 事务日志只有在得到commit
命令才会同步到数据表中,其他任何情况都会清空事务日志(rollback也会断开连接)
事务的使用场景
如果在某个业务中需要执行多条SQL语句,那么此时一般是需要使用到事务,从而保证这多条SQL语句执行同时成功或同时失败.例如: 转账、批量删除、从购物车中提交订单等等操作
事务的四大特性(ACID)
1. 原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生.
2. 一致性(Consistency)
事务必须使数据库从一个一致性状态变换到另外一个一致性状态.
3. 隔离性(Isolation)
事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰.
4. 持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响,一旦提交无法回滚
MYSQL进行事务管理操作
自动事务(mysql默认)
MySQL默认是自动提交事务的,一条sql语句就是一个事务
手动开启一个事务
方式一: 手动开启事务的方式
start transaction;
手动开启事务之后,执行的SQL语句都不会真正改变数据库中的数据,需要用户手动提交事务才能够真正执行SQL语句
(SQLyog中可能无法保证start后的语句与该事务开启语句在通过一个连接中而导致无法正常使用事务,在cmd中可以正常使用)
方式二: 设置MYSQL中的自动提交的参数【了解】
第一步: 查看MYSQL中事务是否自动提交
show variables like '%commit%';
第二步: 设置自动提交的参数为OFF
# 0:OFF 1:ON
set autocommit = 0;
提交和回滚事务
1. 提交事务
当这个事务中的SQL语句执行完毕之后,没有出现任何问题,那么我们需要在最后提交事务,让这些SQL语句真正执行去改变数据库中的数据
commit;
2. 回滚事务
当执行这个事务中的SQL语句的过程中,一旦出现问题或者异常,则需要回滚事务,从而回到SQL语句执行之前的状态
rollback;
回滚与提交都会导致事务结束
事务的隔离级别
不考虑事务的隔离性会引发的问题
事务在操作时的理想状态: 所有的事务之间保持隔离,互不影响.因为并发操作,多个用户同时访问同一个数据.可能引发并发访问的问题
事务隔离级别
可以通过设置事物隔离级别解决读的问题
事务四个隔离级别
级别 | 名字 | 隔离级别 | 脏读 | 不可重复读 | 幻读 | 数据库默认隔离级别 |
---|---|---|---|---|---|---|
1 | 读未提交 | read uncommitted | 是 | 是 | 是 | |
2 | 读已提交 | read committed | 否 | 是 | 是 | Oracle |
3 | 可重复读 | repeatable read | 否 | 否 | 是 | MySQL |
4 | 串行化 | serializable | 否 | 否 | 否 | 最高的隔离级别 |
隔离级别越高,性能(效率)越差,安全性越高.
第四个开启之后就是 一个会话的事务操作只能等另一个会话的事务提交后才能继续进行
设置隔离级别
- 设置事务隔离级别
set session transaction isolation level 隔离级别;
eg: 设置事务隔离级别为read uncommitted
set session transaction isolation level read uncommitted;
- 查询当前事务隔离级别
select @@tx_isolation;
DCL语句
我们现在默认使用的都是root用户,超级管理员,拥有全部的权限.但是,一个公司里面的数据库服务器上面可能同时运行着很多个项目的数据库.所以,我们应该可以根据不同的项目建立不同的用户,分配不同的权限来管理和维护数据库.
创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
关键字说明:
用户名
:将创建的用户名2. `主机名`:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
密码
:该用户的登陆密码,密码可以为空,如果为空则l该用户可以不需要密码登陆服务器
具体操作:
-- user1用户只能在localhost这个IP登录mysql服务器
CREATE USER 'user1'@'localhost' IDENTIFIED BY '123';
-- user2用户可以在任何电脑上登录mysql服务器
CREATE USER 'user2'@'%' IDENTIFIED BY '123';
授权用户
用户创建之后,基本没什么权限!需要给用户授权
授权格式:GRANT 权限1, 权限2... ON 数据库名.表名 TO '用户名'@'主机名';
关键字说明:
1. GRANT
授权关键字
2. 授予用户的权限,如SELECT
,INSERT
,UPDATE
等.如果要授予所的权限则使用ALL
3. 数据库名.表名
:该用户可以操作哪个数据库的哪些表.如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.*
4. '用户名'@'主机名'
: 给哪个用户授权
具体操作:
- 给user1用户分配对test这个数据库操作的权限
GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON test.* TO 'user1'@'localhost';
撤销授权
REVOKE 权限1, 权限2... ON 数据库.表名 FROM '用户名'@'主机名';
具体操作:
- 撤销user1用户对test操作的权限
REVOKE ALL ON test.* FROM 'user1'@'localhost';
查看权限
SHOW GRANTS FOR '用户名'@'主机名';
具体操作:
- 查看user1用户的权限
SHOW GRANTS FOR 'user1'@'localhost';
删除用户
DROP USER '用户名'@'主机名';
具体操作:
- 删除user2
DROP USER 'user2'@'%';
4.6 修改用户密码
4.6.1 修改管理员密码
mysqladmin -uroot -p password 新密码 -- 新密码不需要加上引号
注意:需要在未登陆MySQL的情况下操作.
具体操作:
mysqladmin -uroot -p password root
输入老密码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r850Grfd-1643421863482)(image/DCL08.png)]
4.6.2 修改普通用户密码
set password for '用户名'@'主机名' = password('新密码');
注意:需要在登陆MySQL的情况下操作.
具体操作:
`set password for 'user1'@'localhost' = password('666666');`
写在最后:
路漫漫其修远兮,吾将上下而求索!伙伴们,再见!
边栏推荐
猜你喜欢
navicat无法连接mysql超详细处理方法
Golang go-redis cluster模式下不断创建新连接,效率下降问题解决
The mysql time field is set to the current time by default
MySQL 有这一篇就够(呕心狂敲37k字,只为博君一点赞!!!)
解决npm warn config global `--global`, `--local` are deprecated. use `--location=global` instead
Ningbo Zhongning Pawn will transfer 29.5% of the equity for 2.8338 million yuan, and the owner's equity in 2021 will be 9.6875 million yuan
MySQL 8.0.29 设置和修改默认密码
PhpMetrics 使用
MySQL 8.0.29 set and modify the default password
【科研】文献下载神器方式汇总
随机推荐
proxy反向代理
ML's shap: Based on FIFA 2018 Statistics (2018 Russia World Cup) team match star classification prediction data set using RF random forest + calculating SHAP value single-sample force map/dependency c
for...in 和 for...of 的区别
3分钟带你了解微信小程序开发
Installation and use of cnpm
【MySQL】DQL相关操作
Solve npm warn config global `--global`, `--local` are deprecated. use `--location=global` instead
Go语学习笔记 - gorm使用 - 事务操作 Web框架Gin(十一)
cmd(命令行)操作或连接mysql数据库,以及创建数据库与表
win10重建索引
代码越写越乱?那是因为你没用责任链
1064 Complete Binary Search Tree
Navicat new database
MYSQL JDBC图书管理系统
语言代码表
Py's pdpbox: a detailed introduction to pdpbox, installation, and case application
“由于找不到MSVCP140.dll,无法继续执行代码,重新安装程序可能会解决此问题等”解决方案
cnpm installation steps
ThinkPHP high imitation blue play cloud network disk system source code / docking easy payment system program
MySQL 8.0.29 设置和修改默认密码