前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、事务
1、事务简介
1、含义:
一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行,每个mysql语句都是相互依赖的。其中innodb引擎支持事务。
通过show engines;:查看mysql支持的存储引擎
2、事务的ACID属性
原子性:
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性:
事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
隔离性:
事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。
2、事务的使用
1、事务的创建
隐式(自动)事务:
事务没有明显的开启和结束的标记。比如:insert、update、delete语句
显式事务:
事务具有明显的开启和结束的标记
前提:必须先设置自动提交功能为禁用
set autocommit=0;设置自动提交功能为禁用(只针对当前事务有效)
step1:开启事务
set autocommit=0;
start transaction;可选的
step2:编写事务中的sql语句(select、、insert、update、delete)
语句1;
语句2;
…
step3:结束事务
commit;提交事务
rollback;回滚事务
savepoint 节点名;设置保存点
3、事务的并发问题
对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题。
比如:脏读(一个事务读取了其他事务还没有提交的数据)、不可重复读(一个事务多次读取,但结果不一样)、幻读(一个事务读取了其他事务还没有提交的数据,只是读到的是其他事务“插入”的数据)
MySQL支持4种事务隔离级别,MySQL默认的事务隔离级别为:repeatable read(可重复读)。
😶可重复读:确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行更新,可以避免脏读和不可重复读,但幻读的问题依然存在。
每启动一个mysql程序,就会获得一个单独的数据库连接,每个数据库连接都有一个全局变量@@tx_isolation,表示当前的事务隔离级别。
✔查看当前的隔离级别:SELECT ✔@@tx_isolation;
✔设置当前mysql连接的隔离级别:set transaction isolation level read committed;
✔设置数据库系统的全局隔离级别:set global transaction isolation level read committed;
二、 视图
1、视图的简介
含义:就是虚拟的表,通过表动态生成的数据,只保存了sql逻辑,不保存查询结果,具有临时性。
2、视图使用
1、创建视图
create view 视图名;
2、修改视图
方式一:create or replace view 视图名 as 查询语句;
方式二:alter view 视图名 as 查询语句;
3、删除视图
语法:drop view 视图名,视图名,…;
4、查看视图
语法:desc 视图名;(推荐)
图中演示俩种方式:
5、视图的更新(一般不更新,例子比较简单所以能更新)
以下类型视图是不能更新的
😷包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all
😷常量视图
😷Select中包含子查询
😷join(不能插入)
😷from 一个不能更新的视图
😷where子句的子查询引用了from子句中的表