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.视图一般不能增删改