【Mysql】七、Mysql基础篇 --- 事务和视图

一、事务

一组sql组成一个执行单元,这些sql要么都执行,要么都不执行;执行中报错了,都不执行,回滚之前的修改内容

1、事务的四大特点(ACID)

  1. 原子性:

事务是最小的单元,内部的sql都不可再分割执行,要么都执行成功,要么都执行失败

  1. 一致性:

事务修改之后的数据,保持一致。举例:两个账户转账,执行成功后金额与转账之前的总额保持一致。

  1. 隔离性:

事务之间的是相互隔离,互不干扰

  1. 持久性:

事务一旦提交,不可撤回

2、事务的使用步骤

-- 查看是否开启自动提交
SHOW VARIABLES LIKE 'autocommit'

-- 1. 关闭自动提交(默认开启事务)
SET autocommit = 0;
START TRANSACTION; -- 此句可选
-- 2. 执行的sql语句
UPDATE account SET balance = 100 WHERE user_id = 1;
UPDATE account SET balance = 150 WHERE user_id = 2;
-- 3.提交事务
COMMIT;
-- 4.回滚事务
ROLLBACK;

delete、truncate回滚策略

-- DELETE会被事务回滚
SET autocommit=0
DELETE FROM users;
ROLLBACK;

-- TRUNCATE删除表操作不会被事务回滚
SET autocommit=0
TRUNCATE TABLE users;
ROLLBACK

3、事务并发

  1. 隔离级别
    mysql支持四种隔离级别:

Read Uncommitted(读取未提交内容,读取到的数据是未commit的修改内容,称之为脏读

Read Committed(读取提交内容,此时再同一事务内两个相同查询,产生不同的数据行,导致数据不一致)

Repeatable Read(可重读,它确保同一事务的多个实例在读取数据时,会看到同样的数据,显示的都是commit之前或者之后的同一数据,此时后出现幻读而会因为另一事务修改后,本次事务也提交,再执行一样的查询,结果与再事务内的数据不一致)

Serializable( 这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争)

oracel隔离级别:

Read committed 和 Serializable

  1. 隔离级别展示

脏读:事务A第一次读取A表内容,此时事务B修改了A表的数据,并且提交,此时事务A再次读取A表内容,此时第一次查询A表内容和第二次查询结果不等。
不可重复读:事务A再未提交之前,由于另一事务修改了内容,导致再事务A再本次事务内执行同一查询,但是结果不相同
幻读:事务A事务内多次的同一查询结果相等,但是提交之后,查询的结果与再事务中的查询结果集不等。多出现与插入,隔离级别过低,两个修改数据可能会干扰到另一事务修改的行,,导致多修改或则少修改,,Serializable隔离级别时,另一修改会加锁等待。

隔离级别脏读不可重复读幻读
Read Uncommitted
Read Committed
Repeatable Read
Serializable
  1. 查看默认隔离级别
    8.0以下版本:select @@tx_isolation;
    8.0+的版本:
    select @@transaction_isolation
    在这里插入图片描述
    show variables like 'transaction_isolation';
    在这里插入图片描述
    默认的隔离级别为:REPEATABLE-READ

  2. 设置隔离级别

-- 设置当前连接的隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE
-- 设置全局隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE

二、视图

个人觉得画蛇添足,没有必要,反而会增加代码阅读的难度

视图创建只是保存sql的查询逻辑,并不会占用存储空间

-- 创建视图
CREATE VIEW my_view
AS
SELECT username FROM users WHERE id = 17

-- 查询视图
SELECT * FROM my_view

-- 修改视图 1
CREATE OR REPLACE VIEW my_view
AS
SELECT username,age FROM users WHERE id = 17

-- 修改视图 2
ALTER VIEW my_view
AS
SELECT username,age,id FROM users WHERE id = 17

-- 删除视图
DROP VIEW my_view

-- 查看视图结构
DESC my_view

已标记关键词 清除标记
相关推荐
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质? 你是否想成为一名资深开发人员,想开发别人做不了的高性能程序? 你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹?   那么C++就是你个人能力提升,职业之路进阶的不二之选。 【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。 2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。 3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。 【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署; 2.吊打一切关于C++的笔试面试题; 3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。 【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块 基础篇 本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。 进阶篇 本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。 提升篇: 本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页