Java 学习笔记(十八)

Java 学习笔记(十八),第1张

Java 学习笔记(十八)

文章目录
  • mysql 事务
    • 事务和锁
    • 基本 *** 作
    • 事务细节
    • mysql 事务隔离级别
    • 查看和设置隔离级别
    • 修改默认隔离级别的方法
    • 事务的ACID特性
  • 存储引擎
    • 查看存储引擎
    • 主要的 存储引擎/表类型 特点
    • 如何选择存储引擎
    • 修改存储引擎
  • 视图
    • 基本使用
    • 视图相关细节
    • 视图的优点
  • mysql 管理
    • 创建用户
    • 删除用户
    • 用户管理的目的
    • 修改用户密码
    • mysql 中的权限
    • 给用户授权
    • 回收用户权限
    • 删除用户
    • 其他细节

学习内容来自 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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/5682346.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存