【Java EE】Day04 MySQL多表、事务、事务隔离级别、DCL
一、多表查询
1、概述
- 笛卡尔积:两集合的所有组成情况
- 多表查询:消除笛卡尔积得到的无用数据
2、分类
- 内连接查询(满足指定条件无空值,只显示有关联的数据)
- 隐式内连接:使用where限制消除无用数据
- 显式内连接:SELECT * FROM emp INNER JOIN dept ON emp.dept_id=dept.id;
- 外连接查询
- 左外连接:left [outer] join,查询左表所有数据及其交集(以左表为参照)
- 右外连接:right[outer] join,查询右表所有数据及其交集
- 子查询
- 概念:查询中嵌套查询
- 不同结果:
- 单行单列
- 多行单列
- 多行多列
二、事务
1、概念
- 多个步骤的业务操作,要么同时成功要么同时失败(如转账)
- 操作的过程
- 开启事务:start transaction
- 回滚:rollback
- 提交:commit
-- 创建数据表
CREATE TABLE account (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10),
balance DOUBLE
);
-- 添加数据
INSERT INTO account (NAME, balance) VALUES ('zhangsan', 1000), ('lisi', 1000);
-- 0 开启事务
START TRANSACTION;
-- 1张三给李四转账500元
-- 2查询张三账户余额是否大于500
-- 3张三账户-500
UPDATE account SET balance = balance - 500 WHERE NAME='zhangsan';
-- 李四账户+500
-- 出错了
UPDATE account SET balance =balance + 500 WHERE NAME='lisi';
SELECT * FROM account;-- 临时数据的变化,不是持久的变化
-- 发现执行没有问题,提交事务
COMMIT;
-- 发现出问题了,应该 回滚事务
ROLLBACK;-- 回滚,保证账户的安全性
2、事务提交方式
- 自动提交(默认,-1),每条DML语句都会自动提交一次事务
- 手动提交(0):先开启事务再提交
- 修改默认方式:set @@autocommit=0;
3、事务的四大特征:
- 原子性:不可分割的最小操作单位,要么同时成功,要么同时失败
- 持久性:事务一旦提交/回滚,数据库会持久化的保存数据
- 隔离性:多个事务之间,相互独立。
- 一致性:事务操作前后,数据总量不变
4、事务的隔离级别
- 概念:多个事务操作同一批数据,会引发一些问题,通过设置不同隔离级别进行解决
- 存在的问题:
- 脏读:读取到另一个事务中没有提交的数据
- 不可重复读(虚读):同一事务读取到的数据不一样
- 幻读:事务查询不到另一事务添加到的数据(读取不到另一个事务中提交的数据)
- 不同的事务隔离级别
- read uncommitted
- 读未提交
- 产生问题:脏读、不可重复读、幻读
- read committed(Oracle默认)
- 产生问题:不可重复读、幻读
- repeatable read(MySQL默认)
- 产生问题:幻读
- 可重复读
- serializable:
- 串行hang化,锁表,效率低
- 可以解决所有问题
- read uncommitted
- 设置事务的隔离级别:SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
三、DCL
1、概述
DDL、DML、DQL、DCL
2、对用户的管理操作
- 添加用户:
- CREATE USER '用户名@主机名' identify 密码;
- 在任意电脑上登录:CREATE USER '用户名@%' identify 密码;-- 表示远程登录
- 删除用户:
- DROP USER '用户名'@'主机名';
- 修改用户密码
- UPDATE USER SET PASSWORD=PASSWORD('新密码') WHERE USER='用户名';
- DCL特有简化方式:SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('密码');
- 忘记密码解决方案:

3、权限管理
- 查询权限
- SHOW GRANTS FOR '用户名'@'主机名';
- 授予权限
- GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
- 授予所有权限给所有表:GRANT ALL ON *.* TO 'zhangsan'@'localhost';
- 撤销权限
- REVOKE 权限列表 ON 数据库.表名 FROM '用户名'@'主机名';
【Java EE】Day04 MySQL多表、事务、事务隔离级别、DCL的更多相关文章
- 数据库事务的四大特性以及事务的隔离级别(mysql)
本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指 ...
- MySQL事务的隔离级别
为什么需要隔离 当多个线程都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性,在介绍数据库提供的各种隔离级别之前,我们先看看如果不考虑事务的隔离性,会发生的几种 ...
- MySQL数据库事务的四大特性以及事务的隔离级别
一.事务的四大特性(ACID) 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: 1.原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因 ...
- Java 事务的隔离级别
引言 之前关于事务的文章已介绍了事务的概念以及事务的四个属性(ACID),相信你对事务应该有所认识和了解. 本篇文章是关于事务的隔离性,介绍数据库提供的多种隔离级别. 数据库访问的并发性问题 所谓事务 ...
- MySQL数据库事务各隔离级别加锁情况--read committed && MVCC(转载)
http://www.imooc.com/article/17290 http://www.51testing.com/html/38/n-3720638.html https://dev.mysql ...
- 浅谈MySQL事务及隔离级别
目录 1.什么是事务 2.事务的ACID属性 2-1.原子性(Atomicity) 2-2.一致性(Consistency) 2-3.隔离性(Isolation) 2-4.持久性(Durability ...
- MySQL事务及隔离级别详解
MySQL事务及隔离级别详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL的基本架构 MySQL的基本架构可以分为三块,即连接池,核心功能层,存储引擎层. 1> ...
- MySQL数据库事务各隔离级别加锁情况--read committed && MVCC(转)
本文转自https://m.imooc.com/article/details?article_id=17290 感谢作者 上篇记录了我对MySQL 事务 隔离级别read uncommitted的理 ...
- MySQL数据库事务各隔离级别加锁情况--read uncommitted篇(转)
本文转自https://m.imooc.com/article/details?article_id=17291,感谢作者 1.目的 1.1 合适人群 1.数据库事务特征我只是背过,并没有很深刻的理解 ...
- MySQL 温故知心(二) 事务的隔离级别
事务的隔离级别 A事务做了操作 没有提交 对B事务来说 就等于没做 获取的都是之前的数据但是 在A事务中查询的话 查到的都是操作之后的数据没有提交的数据只有自己看得到,并没有update到数据库 查看 ...
随机推荐
- 海康摄像机使用GB28181接入SRS服务器的搭建步骤---源码安装的方式
下载代码 地址:https://github.com/ossrs/srs-gb28181 https://github.com/ossrs/srs-gb28181.git 注意:使用的是含有gb281 ...
- mysql8 安装与配置文件添加时区
mysql默认时区选择了CST mysql>show variables like '%time_zone%'; 解决办法:(建议通过修改配置文件来解决) 通过命令在线修改: mysql> ...
- Shell脚本中判断字符串是否被包含在内并且使用grep 精确匹配
str1="abcdefgh" str2="def" result=$(echo $str1 | grep "${str2}") if [[ ...
- 使用cnpm创建vue项目(含离线安装)
# 全局安装淘宝cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org #升级 npm cnpm install npm ...
- Alertmanager集成Dingtalk/Wechat/Email报警
grafana对报警的支持真的很弱,而Prometheus提供的报警系统就强大很多 Prometheus将数据采集和报警分成了两个模块.报警规则配置在Prometheus Servers上,然后发送报 ...
- 玖章算术受邀参加红杉Talk「创新的复利」科技专场,共同探讨云计算的前世今生
9月2日,本周五14:00 「创新的复利」 Sequoia Talk系列论坛,首期直播盛大启动.在第一期科技专场,4位红杉中国资深投资人.8位创新创业者将带我们深入工业软件.机器人.云计算等领域,围绕 ...
- Linux命令全解
strace 获取某个可执行文件执行过程中用到的所有系统调用 :strace -f g++ main.cpp &| vim 查看g++编译过程调用了哪些系统调用,通过管道符用vim接收 :%! ...
- GCC Arm 12.2编译提示 LOAD segment with RWX permissions 警告
使用GCC Arm工具链开发的项目, 在升级到 arm-gnu-toolchain-12.2 之后, 编译出现警告 arm-gnu-toolchain-12.2.mpacbti-bet1-x86_64 ...
- Spring Boot 源码学习之转载
这次的学习,主要转载了 波波老师的笔记,后续会自己整理一份 1.Spring-Boot源码分析-源码编译:https://dpb-bobokaoya-sm.blog.csdn.net/article/ ...
- 『现学现忘』Git后悔药 — 32、revert撤销(一)
目录 1.Git的三种后悔药 2.revert命令原理 3.revert命令的使用 (1)移除某次提交的修改 (2)revert命令说明 1.Git的三种后悔药 在Git中后悔药有三种:amend.r ...