MySQL复习day05:TCL事务控制语言和视图

TCL事务控制语言和视图

      • TCL语句
        • 事务的acid属性
        • 事务的创建
      • 隔离
      • TCL结束
      • 视图
    • MySQL学习列表
    • 致谢

TCL语句

TCL即事务控制语言。

事务:一个或者一组sql语句组成的一个执行单元,这个执行单元要么全部执行,要么全部不执行。如果单元中某条SQl语句一旦执行失败或产生错误,整个单元将会回滚,所有受到影响的数据将回到事务开始的状态。

  • 在MySQL中用的比较多的引擎有:myisam,memory,innodb。其中innodb支持事务,而myisam,memory不支持。

事务的acid属性

1.(Atomicity)原子性

原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
2.(Consistency)一致性

事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
3.(Isolation)-隔离性

是指一个事务的执行不能够受其他事务的干扰,并发执行的各个事务之间互相干扰。
4.(Durability) 持久性

持久性是指一个事务一旦提交,它对数据库中的数据的改变就是永久性的,
接下来的其他操作和数据库不应该对其有任何影响。

事务的创建

(一)隐式事务

事务没有明显的开启和结束标记,比如insert,update,delete语句
(二)显示事务

事务具有明显的开启和结束的标记,必须先设置自动提交功能为禁用状态。

语法

步骤一:开启事务
set autocommit = 0;
start transaction; #可以不写

步骤二:编写事务中的SQL语句(select,insert,update,delete)

步骤三:结束事务
commit;#提交事务
rollback;回滚事务,相当于不执行SQL语句
savepoint 节点名;设置保存点,搭配roolback to 节点名

set autocommit = 0;
start transaction;
use stus;
update stu set sal =10 where id =1;
update stu set sal =14 where id =2;
commit; #提交事务
#执行之后,id=1的sal=10,id=2的sal=14;


set autocommit = 0;
start transaction;
use stus;
update stu set sal =12 where id =1;
update stu set sal =12 where id =2;
rollback;
#原来表中的数据为:id=1的sal=10,id=2的sal=14; 执行之后,id=1的sal=10,id=2的sal=14;相当于回滚到了起始的状态。


set autocommit = 0;
start transaction;
use stus;
update stu set sal =15 where id =1;
savepoint a;
update stu set sal =15 where id =2;
rollback to a;
select * from stus.stu;
#原来表中的数据为:id=1的sal=12,id=2的sal=12; 执行之后,id=1的sal=15,id=2的sal=12;相当于回滚到了节点a的状态。

隔离

对于同时运行的多个事务,当这些事务访问数据库相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题。

  1. 脏读:对于两个事务T1 和T2,T1读取了已经被T2更新但还没有被提交的字段,
    之后,若T2回滚,T1读取的内容就是临时且无效的。
  2. 不可重复读:对于两个事务T1 和T2,T1读取了一个字段,然后T2更新了该字段,
    之后,T1再次读取同一个字段,值就不同了。
  3. 幻读:对于两个事务T1 和T2,T1 从一个表中读取了一个字段,然后T2 在该表中插入
    了一些新的行,之后T1 再次读取同一个表,就会多出几行。

MySQL支持4种隔离级别,默认为REPEATABLE READ
MySQL复习day05:TCL事务控制语言和视图_第1张图片
查看和设置隔离级别

select @@transaction_isolation;
set session transaction isolation level read uncommitted; #设置隔离级别为:read uncommitted

TCL结束

视图

视图是一种虚拟表,和普通的表一样使用,是通过普通的表动态的生成数据。
(一)创建视图
方法一:

create view 视图名
as 
查询语句;

方法二:

create  or replace view 视图名
as 
查询语句;
create or replace view v #创建或修改
as 
select z.id,bonus,name,budget,probability,variety,match_id
, boyname ,user_id , b.rank ,low ,high from zhutong z
inner join boys b
on b.id =z.match_id;

select * from v #使用
where boyname like '%e%';

(二)修改视图:
方法一:

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

方法二:

alter view 视图名 
as 
查询语句;

(三)删除视图

drop view 视图名1,视图名2,...;

(四)查看视图

desc 视图名;

(五)视图的更新
插入

 insert into 视图名 values(值1,值2,...);#会影响到原始表的数据

修改

update 视图名 set 列名=值,...;

删除

delete from 视图名 where 筛选条件;

以下情况不能对视图进行更新
MySQL复习day05:TCL事务控制语言和视图_第2张图片
视图和表的对比

创建语法关键字 是否占用完全物理空间 使用
视图 create view 只保存了SQL逻辑 增删改查,但是一般用于查询
create table 保存了数据和逻辑 增删改查

delete和truncate在事务使用时的区别

delete可以使用rollback返回到事务前的状态,truncate则不能回滚到事务前的状态。

MySQL学习列表

MySQL复习day01:数据库简介和 DQL数据查询语言
MySQL复习day02:DQL数据查询语言续
MySQL复习day03:DQL数据查询语言完结
MySQL复习day04:DML数据操作语言和DDL数据定义语言
MySQL复习day05:TCL事务控制语言和视图
MySQL复习day06:变量,存储过程
MySQL复习day07:函数
MySQL复习day08:流程控制结构
MySQL复习day09:逻辑架构和引擎,索引详解(explain)

致谢

感谢诸君观看,如果感觉有用的话,点个赞吧!



你可能感兴趣的:(数据库,数据库,mysql)