Java 学习笔记(十八)

本文详细介绍了MySQL中的事务处理,包括事务的基本操作、隔离级别及其设置,以及ACID特性。此外,还探讨了存储引擎的选择,如InnoDB和MYISAM,并讲解了视图的创建、修改和删除。同时,文章涵盖了用户管理和权限控制,如创建、删除用户,以及权限的授予和回收。最后,提到了MySQL中的用户管理和权限管理的重要性和相关操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习内容来自 B 站韩顺平老师的 Java 基础课

mysql 事务

事务的定义:

  • 用于保证数据的一致性,由一组相关的 dml 语句组成。该组语句要么全部执行成功,要不全部执行失败。
  • 如转账就需要用事务来处理,用以保持数据一致性

事务和锁

当执行事务操作时,mysql 会在表上加锁,防止其他用户改表的数据

基本操作

  1. start transaction – 开始一个事务
  2. savepoint 保存点名 – 设置保存点
  3. rollback to 保存点名 --回退事务
  4. rollback – 回退全部事务
  5. commit – 提交事务,事务的所有操作生效,不能回退

事务细节

在这里插入图片描述

在这里插入图片描述

mysql 事务隔离级别

在这里插入图片描述

在这里插入图片描述
事务隔离级别定义了事务与事务之间的隔离程度

在这里插入图片描述
注,√ 表示可能会出现,× 表示不会出现

设置隔离级别的语法:

set session transaction isolation level 隔离级别

该语句会更改当前数据库连接的隔离级别

查看和设置隔离级别

查看当前会话隔离级别的方法:

select @@tx_isolation;

查看系统当前隔离级别的方法

select @@global.tx_isolation;

设置当前会话隔离级别

set session transaction isolation level 隔离级别;

设置系统当前隔离级别

set global transaction isolation level 隔离级别;

注意:

  • mysql 默认的隔离级别是可重复读(repeatable read)
  • 一般情况下,没有特殊需求,不做修改

修改默认隔离级别的方法

打开 mysql 的安装目录,在安装的根目录下会有配置文件 my.ini ,打开后修改(如果没有则添加)隔离级别:

# 可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE
transaction-isolation = 隔离级别参数

这个过程需要先重启 mysql 服务后才能生效

关闭 mysql 服务,在命令行运行(管理员模式)

net stop mysql

启动服务

net start mysql

事务的ACID特性

在这里插入图片描述

存储引擎

Mysql 表类型由存储引擎(storage engine)决定,常用的包括:MYISAM, InnoDB, MEMORY 等

Mysql 数据表主要支持六种类型,分别是

  • CSV
  • Memory
  • ARCHIVE
  • MRG_MYISAM
  • MYISAM
  • InnoDB

这六种又分为两类:事务安全型,比如 InnoDB;其余都属于非事务安全型,如 MYISAM 和 MEMORY

查看存储引擎

show engines;

主要的 存储引擎/表类型 特点

在这里插入图片描述
在这里插入图片描述

如何选择存储引擎

  1. 如果应用不需要事务,只是处理基本的 CRUD 操作,那么 MYISAM 最好,速度快
  2. 如果需要支持事务,选择 InnoDB
  3. Memory 存储引擎就是将数据存储在内存中,由于没有磁盘 I/O 的等待,速度极快,但是所有修改会在服务关闭后丢失。(经典用法,用户的在线状态)

修改存储引擎

alter tablbe 表名 engine = 存储引擎;

视图

假如有需求:
在这里插入图片描述
基本概念:

  • 视图是一个虚拟表,其内容由查询定义。和真实的表一样,视图包含列,其数据来自对应的真实表
  • 通过视图可以修改对应的真实表的数据
  • 对应真实表数据若改变,视图也会改变

对于上面那个需求,在某个用户查询时,可以将允许其查看的列形成一个视图,然后让该用户查询视图即可

基本使用

创建

create view 视图名 as select语句

修改

alter view 视图名 as select语句

查看视图

desc 视图名

查看创建视图时的语句

show create view 视图名

删除

drop view 视图名1, 视图名2

例子:
实现上一节提出的需求

create view emp_view01 
	as
	select empno, ename, job, depto from emp;

视图相关细节

  • 创建视图后,到数据库源文件去看,视图只对应有一个试图结构文件 .frm,没有数据文件
  • 视图与基表的数据变化会互相影响
  • 视图可以再对应另一个视图,套娃

视图的优点

在这里插入图片描述
例子:
基于 emp、dept、salgrade 三张表,创建一个视图

create view union_view
	as
	select empno, ename, dname, grade
	from emp, dept, salgrade
	where emp.deptno = dept.deptno and
	(sal between losal and hisal);

mysql 管理

mysql 中的用户,都存储在系统数据库 mysql 中 user 表

user 表的重点字段说明:

  • host:允许登陆的”位置“,localhost 表示该用户只允许本机登录,也可能为 ip 地址,表示该用户只能从某个 ip 登录
  • user:用户名
  • authentication_string:密码,是通过 password() 加密后的密码

创建用户

create user '用户名'@'允许登录位置' identified by 密码

删除用户

drop user '用户名'@'允许登录位置'

用户管理的目的

  • 根据不同用户需求,创建不同的账号,设置相应的权限,防止有越权行为发生
  • 不同用户,因为权限的限制,可以操作的库和表可能不同

修改用户密码

修改自己的密码

set password = password('密码');

修改他人密码(需要有修改其他用户密码的权限)

set password for '用户名'@'登陆位置' = password(密码)

mysql 中的权限

在这里插入图片描述

给用户授权

grant 权限列表 on.对象名 to '用户名'@'登陆位置' [identified by 密码]

参数说明:

  • 权限列表,多个权限用逗号隔开。可以用 all [privileges] 表示所有权限
  • *.* :表示本系统所有数据库的所有对象
  • 库.* :表示某个数据库的所有对象
  • identified by 加上后,如果对应用户存在,那么其后的密码将为用户的新密码;如果用户不存在,表示创建新用户

如果权限没有生效,可以刷新

flush priviledges;

回收用户权限

revoke 权限列表 on.对象名 from '用户名'@'登陆位置';

删除用户

drop user '用户名'@'登陆位置';

其他细节

  • 在创建用户的时候,如果不指定位置,则默认为 %,表示所有 IP 都有连接权限 create userxxx
  • create user‘xxx’@‘192.168.1.%’ 表示 xxx 用户在24位前缀为 192.168.1 的 ip 都可以登录
  • 在删除用户的时候,如果登陆位置不为 %,那么需要明确指定 ip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三更鬼

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值