【Mysql数据库基础08】事务、视图的创建和修改

事务和视图

  • 1 事务
    • 1.1 事务的介绍 ACID
    • 1.2 演示事务的使用步骤
      • 1.2.1 事例:张无忌转账500给赵敏
    • 1.3 事务并发问题的介绍
    • 1.4 "删除"在事务中的区别
  • 2 视图
    • 2.1 视图的介绍
    • 2.2 视图的创建
    • 2.3 视图的修改
      • 2.3.1 方式一 create or replace view
      • 2.3.2 方式二 alter view
    • 2.4 视图的删除
    • 2.5 查看视图
  • 3 练习
  • 4 视图的一些其他操作
    • 4.1 插入数据
    • 4.2 修改数据
    • 4.3 删除数据

1 事务

TCL transaction control language事务控制语言

1.1 事务的介绍 ACID

  1. 原子性(Atomicity):原子性要求事务是不可分割的最小工作单位,要么全部操作成功,要么全部操作失败回滚。即要么所有操作都执行,要么都不执行,不存在部分执行的情况。

  2. 一致性(Consistency): 一致性保证了事务在执行前后数据库的状态必须是一致的。在事务开始之前和结束之后,数据库应该仍然保持一致性约束,不会破坏数据完整性和业务规则。

  3. 隔离性(Isolation): 隔离性指的是多个事务并发执行时,事务之间应该相互隔离,使得每个事务感觉不到其他事务的存在。隔离性能够防止并发事务之间出现数据混乱、并发读取数据的问题。

  4. 持久性(Durability): 持久性确保一旦事务提交,其所做的修改将永久保存在数据库中,即使系统发生故障或重新启动,修改的数据也不会丢失。

1.2 演示事务的使用步骤

必须先设置自动提交功能为禁用
set autocommit=0;

步骤1:开启事务
set autocommit=0;
start transaction;步骤2:编写事务中的sql语句(select insert update delete)
语句1;
语句2;
...步骤3:结束事务
commit;提交事务
rollback;回滚事务show variables like 'autocommit';
show engines;

1.2.1 事例:张无忌转账500给赵敏

1.先创建一个账户表

create table account(id int primary key auto_increment,username varchar(20),balance double
);

auto_increment 通常用于为表中的主键字段生成唯一的自增值。当某一列被指定为 auto_increment 时,数据库系统会自动为新插入的记录分配一个唯一的递增值,而不需要用户手动指定该值。

2.查看account表中的所有索引

show index from account;

3.插入值

insert into account(username,balance)
values ('张无忌',1000),('赵敏',1000);

4.事务流程

# 开启事务
set autocommit=0;
start transaction;# 编写事务的语句
update account 
set balance = 1000
where username = '张无忌';update account 
set balance = 1000
where username = '赵敏';#结束事务
commit;

5.回滚事务

# 开启事务
set autocommit=0;
start transaction;# 编写事务的语句
update account 
set balance = 1000
where username = '张无忌';update account 
set balance = 1000
where username = '赵敏';#回滚事务
rollback;

1.3 事务并发问题的介绍

  1. 脏读(Dirty Read):脏读指在一个事务中读取了另一个事务未提交的数据,如果另一个事务在后续发生回滚操作,那么当前事务读取到的数据就是“脏”的。为避免脏读,可以使用 READ_COMMITTED 隔离级别,它规定一个事务只能读取到已经提交的数据。

  2. 不可重复读(Non-Repeatable Read):不可重复读指在同一事务中,由于其他事务修改了数据,导致一个事务两次读取相同的记录时,结果不一致。为避免不可重复读,可以使用 REPEATABLE_READ 隔离级别,它确保在一个事务中多次读取同一数据时,得到的结果是一致的。

  3. 幻读(Phantom Read):幻读指在同一事务内,由于其他事务插入、更新或删除数据,导致同一查询操作多次返回不同数量的数据行。为避免幻读,可以使用 SERIALIZABLE 隔离级别,它规定事务之间是串行执行的,确保在事务执行期间,其他事务无法对数据进行操作,从而避免幻读问题。

可以通过设置隔离级别,避免以上现象发生

事务的隔离级别

脏毒不可重复读幻读
read uncommitted
read committed×
repeatable read××
serializable×××

1.4 "删除"在事务中的区别

# 演示delete
set autocommit = 0;
start transaction;
delete from account;
rollback;# 演示truncate
set autocommit=0;
start transaction;
truncate table account;
rollback;

2 视图

2.1 视图的介绍

MYSQL从5.0.1版本开始提供视图功能。一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果。不占据物理空间。

例:查询姓张的同学的姓名和专业名
原始方法:

select stuname,majorname
from stuinfo s
inner join major m 
on s.majorId = m.id
where s.stuname = '张%';

视图方法:

create view v1
as
select stuname,majorname
from stuinfo s
inner join major m
on s.majorid = m.id;select *
from v1
where stuname like '张%';

2.2 视图的创建

例1:查询姓名中包含a字符的员工名、部门名和工种信息

# 创建视图
create view myv1
as
select last_name,department_name,job_title
from employees e
join departments d on e.department_id = d.department_id
join jobs j on e.job_id = j.job_id;# 查询视图
select *
from myv1
where last_name like '%a';

例2:查询各部门的平均工资级别

# 创建视图查看每个部门的平均工资
create view myv2
as
select department_id,avg(salary) as ag
from employees e
group by department_id;# 根据视图和job_grades查询工资级别
select myv2.*,grade_level
from myv2
join job_grades on ag between lowest_sal and highest_sal;

例3:查询平均工资最低的部门信息

# 创建视图查看部门的平均工资
# 例2中已创建# 在视图中查询工资最低的部门信息
select d.*
from myv2
join departments d
on myv2.department_id = d.department_id
where ag = (select min(ag)from myv2
);

还有更简单的做法,但是这个没有显示出部门的所有信息:

select *
from myv2 
order by ag asc
limit 1;

在这里插入图片描述
例4: 查询平均工资最低的部门名和工资

create view myv3
as 
select *
from myv2 
order by ag asc
limit 1;select department_name,ag
from myv3
join departments d
on d.department_id = myv3.department_id;

视图的好处:
1.重用sql语句
2.简化复杂的sql操作,不必知道它的查询细节
3.保护数据,提高安全性

2.3 视图的修改

2.3.1 方式一 create or replace view

create or replace view 视图名
as 
查询语句;

2.3.2 方式二 alter view

alter view 视图名
as 
查询语句;

2.4 视图的删除

drop view myv1,myv2,myv3;

2.5 查看视图

#方式一
desc myv3;#方式二 效果不好
show create view myv3;

3 练习

一、创建视图 emp_v1,要求查询电话号码以‘011’开头的员工姓名和工资、邮箱

create or replace view emp_v1
as
select last_name,salary,email,phone_number
from employees;select last_name,salary,email
from emp_v1
where phone_number like '011%';

二、创建视图 emp_v2,要求查询部门的最高工资高于 12000 的部门信息

# 创建视图查询部门的最高工资高于12000的id有哪些
create or replace view emp_v2
as
select department_id,max(salary) as m_s
from employees
group by department_id
having m_s > 12000;# 查询视图部门id的部门信息
select d.*,emp_v2.m_s
from emp_v2
join departments d on emp_v2.department_id = d.department_id;

4 视图的一些其他操作

4.1 插入数据

insert into myv1
values ( ),( ),( );

4.2 修改数据

update myv1
set last_name = ''
where last_name = '';

4.3 删除数据

delete from myv1
where last_name = '';

学的好疲惫😇,坚持一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774391.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DaisyDisk for mac 苹果电脑磁盘清理工具

DaisyDisk for Mac是一款直观易用的磁盘空间分析工具,专为Mac用户设计,旨在帮助他们快速识别和管理磁盘上的文件与文件夹,从而释放存储空间。 软件下载:DaisyDisk for mac 激活版 DaisyDisk采用独特的可视化界面,将磁盘…

洋河稳中向好,前三季度营收302.83亿元超去年全年

执笔 | 尼 奥 编辑 | 萧 萧 10月27日,洋河股份公布2023年前三季度业绩报告,这份关键性指标持续向好、超预期的“成绩单”引发业内强烈关注,在白酒行业调整中发挥名酒“压舱石”的积极作用,持续看好洋河高质量增长。 业绩报告显示…

Shadow Tactics

本题链接: 题目: 样例: 输入 1 1 3 3 U 2 2 2 输出 YES 思路: 根据题意,隼人的坐标是不会动的,并且士兵只能直线来回行动。 所以这里我们需要分成三种情况。 1、隼人坐标在士兵走动路线之间,…

Linux 网站定时备份+滚动删除脚本:文件、数据库(命令篇)

为确保数据安全,我们定期对网站相关文件和数据进行备份,以防止因各种原因导致的丢失情况。同时,考虑到服务器空间的限制,我们也会定期清理历史备份数据。 本文以 CentOS 7.9 系统为例,记录如何通过脚本和定时任务实现备…

通过修改ospf的COST值来控制路由选路

配置好OSPF之后,发现默认走的是上面 PC1>tracert 192.168.200.1traceroute to 192.168.200.1, 8 hops max (ICMP), press Ctrl+C to stop1 192.168.100.254 16 ms <1 ms 16 ms2 10.10.10.2 15 ms &l

Python 文件操作-1

目录 打开文件 OS库 打开文件 open()方法 Python 的 open() 方法用于打开一个文件&#xff0c;并返回文件对象&#xff0c;在对文件进行处理过程都需要使用到这个函数&#xff0c;如果该文件无法被打开&#xff0c;会抛出 OSError。 注意&#xff1a; 使用 open() 方法一定…

Java | 自由落体与反弹距离计算

大家可以关注一下专栏&#xff0c;方便大家需要的时候直接查找&#xff0c;专栏将持续更新~ 题目描述 编写一个Java程序&#xff0c;计算一个球从100米高度自由落下&#xff0c;每次落地后反弹回原高度的一半的距离。求这个球在第10次落地时&#xff0c;总共经过的距离和第1…

探究QUIC协议:基于UDP的可靠传输之路

为什么需要基于 UDP 实现可靠传输 主要是 TCP 协议四个方面的缺陷&#xff1a; 升级 TCP 的工作很困难&#xff1b;TCP 建立连接的延迟&#xff1b;TCP 存在队头阻塞问题&#xff1b;网络迁移需要重新建立 TCP 连接&#xff1b; 因此&#xff0c;基于UDP实现可靠传输并不是重…

【python】(13)理解Python中的处理时间的模块

系列文章回顾 【python】(01)初识装饰器Decorator 【python】(02)初识迭代器Iterator 【python】(03)初识生成器Generator 【python】(04)python中实现多任务并发和并行的区别 【python】(05)如何使用python中的logging模块记录日志信息 【python】(06)理解Python中的 lambda 、…

ReentrantLock 原理

(一)、非公平锁实现原理 1、加锁解锁流程 先从构造器开始看&#xff0c;默认为非公平锁实现 public ReentrantLock() {sync new NonfairSync(); } NonfairSync 继承自 AQS 没有竞争时 加锁流程 构造器构造&#xff0c;默认构造非公平锁(无竞争&#xff0c;第一个线程尝试…

2023自适应霍夫曼编码High-performance RDHEI with adaptive Huffman code

RRBE 本文仅供自我学习使用,切勿转载和搬运,如有侵权,联系立删~ 方法总框架 首先由内容所有者生成原始图像像素点的标签映射; 然后数据隐藏者采用自适应霍夫曼编码将多个信息插入加密图像像素点;接收端进行数据提取和图像恢复。在数据提取之前,必须对标记的加密图像进行…

DC-7靶场

一.环境搭建 1.下载地址 靶机下载地址:https://download.vulnhub.com/dc/DC-7.zip 2.虚拟机配置 设置nat&#xff0c;打开靶机&#xff0c;遇到错误点重试和是 开启后如图所示即可 二.开始渗透 1.信息收集 首先找到靶机的ip地址 arp-scan -l 发现靶机的ip地址为192.168.…

影视接口支持资源站去插播,官解官替,切片

​​​​​uutb.centos.chat/jsonwjm.php/?url 公益提供&#xff0c;请友好调用

分布式ID生成方案总结

分布式场景下&#xff0c;需要保证每一个服务拿到的id是唯一的。本文讨论、分析、总结了一些常见的分布式ID生成方案 结论&#xff1a;技术上没有银弹&#xff0c;每种分布式id都有自己的使用场景。uuid适用于业务比较简单&#xff0c;对性能没有太高追求等。 目前主流是 基于数…

某手信息流如何跳V,达到精准数据回传?

在数字营销的新纪元中&#xff0c;快手磁力引擎凭借其卓越的推广能力&#xff0c;已经吸引了无数品牌的目光。而为了更有效地将快手上的流量转化为企业微信的用户&#xff0c;数灵通正逐渐崭露头角&#xff0c;成为品牌方的得力助手。今天&#xff0c;我们就来探讨一下&#xf…

Pytorch多机多卡分布式训练

多机多卡分布式&#xff1a; 多机基本上和单机多卡差不多&#xff1a; 第一台机器&#xff08;主设备&#xff09;&#xff1a; torchrun --master_port 6666 --nproc_per_node8 --nnodes${nnodes} --node_rank0 --master_addr${master_addr} train_with_multi_machine_an…

【问题处理】蓝鲸监控-数据断点解决

本文来自腾讯蓝鲸智云社区用户&#xff1a;fadewalk 在问答社区看到有小伙伴在落地蓝鲸的过程中出现监控平台的grafana面板数据断点问题&#xff0c;往往出现这种问题&#xff0c;都比较的头疼。 如果将CMDB&#xff08;配置管理数据库&#xff09;比作运维的基石&#xff0c;…

嵌入式Linux:空洞文件

空洞文件&#xff08;Sparse File&#xff09;是一种在磁盘上并非完全分配存储空间的文件。它包含了一些逻辑上存在但物理上并未存储的数据。 空洞文件在多线程共同操作文件时具有极大的优势。当创建一个巨大的文件时&#xff0c;单个线程逐步构建文件会耗费大量时间。一种优化…

Soft Robotics:两栖环境下螃蟹仿生机器人的行走控制

传统水陆两栖机器人依靠轮胎或履带与表面的接触及摩擦产生推进力&#xff0c;这种对于表面接触的依赖性限制了现有水陆两栖机器人在低重力环境下&#xff08;如水中&#xff09;的机动性。利用生物自身的推进机制&#xff0c;人为激发生物运动行为&#xff0c;由活体生物与微机…

P1923 【深基9.例4】求第 k 小的数 Python 并未AC的一题

【深基9.例4】求第 k 小的数 题目描述 输入 n n n&#xff08; 1 ≤ n < 5000000 1 \le n < 5000000 1≤n<5000000 且 n n n 为奇数&#xff09;个数字 a i a_i ai​&#xff08; 1 ≤ a i < 10 9 1 \le a_i < {10}^9 1≤ai​<109&#xff09;&#xff…