MySQL数据库基础学习笔记05——TCL

TCL

事务控制语言
1.事务
事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行要么全部不执行。如果单元中某条sql语句一旦执行失败或产生错误,整个单元会回滚。所有受到影响的数据将返回到事务开始以前的状态。如果单元中的所有sql语句均执行成功,则事务被顺利执行。

事务的属性:
1.原子性(atomicity)
事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生
2.一致性(consistency)
事务必须使数据库从一个一致性状态变换到另外一个一致性状态
3.隔离性(isolation)
一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰
4.持久性(durability)
一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库的故障不应该对其有任何影响。

2.语法
步骤一:开启事务
set autocommit=0;
步骤二:编写sql语句
步骤三:结束事务
commit;
rollback;

3.并发问题
脏读:对于两个事务T1,T2,T1读取了已经被T2更新但是还没有被提交的字段,之后,若T2回滚,T1读取的内容就是无效的。
不可重复读:对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段,之后,T1再读取同一个字段,值就不同了。
幻读:对于两个事务T1,T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行,之后,如果T1再次读取同一个表,就会多出几行。
可以设置隔离级别

4.视图
含义:虚拟表
应用场景:
多个地方用到同样的查询结果,且该查询结果sql语句较为复杂

创建:

create view 视图名
as
查询语句;

修改:

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

删除:

drop view 视图名,...

查看:

show create view 视图名;

视图更新:
1.包含以下关键字的sql语句不允许更新:分组函数、 distinct、group by、having、union
2.常量视图不允许更新
3.select包含子查询不允许更新
4.join
5.from一个不能更新的视图
6.where子句的子查询引用了from子句中的表

视图与表的对比:
1.视图不占用物理空间。表占用物理空间
2.视图一般不能增删改

猜你喜欢

转载自blog.csdn.net/qq_44708714/article/details/105878050