1.什么是事务
事务是一个完整的业务逻辑单元,不可再分。
2.TCL
1.DDL(数据库定义语言:Data Dinifition Language),用来操作数据库,数据表,视图,存储过程,包括新建(Create),删除(Drop),修改(Alter),在执行这些操作的时候,DDL语言不需要Commit和Rollback。
2.DML(数据操作语言:Data Manipulation Lanuage),用来插入(insert),删除(Delete),修改(Update)数据库中的数据,在执行这些操作的时候,DML语言需要Commit和Rollback之后才会生效。
3.DCL(数据控制语言:Data Control Language):用来控制数据库组件的存取许可,存取权限等命令;如:Grant,Remoke等、
4.TCL(事务操作语言:Transaction Control Language):
TCL(事务操作语言:Transaction Control Language)
TCL:commit,rollback
3.事务的特性
原子性(atomicity):事务是最小的工作单元,不可再分
一致性(consistency):保证多条DML语句同时成功或同时失败
事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。
如果数据库系统在运行过程中发生故障,有些事务尚未完成就被迫中断,这些未完成的事务对数据库所作的修改有一部分已写入物理数据库,这是数据库就处于一种不正确的状态,也就是不一致的状态
隔离性(isolation):在并发环境中,并发的事务时相互隔离的,一个事务的执行不能不被其他事务干扰。
持久性(durability):最终数据必须持久化到硬盘文件里
一旦事务提交,那么它对数据库中的对应数据的状态的变更就会永久保存到数据库中。–即使发生系统崩溃或机器宕机等故障,只要数据库能够重新启动,那么一定能够将其恢复到事务成功结束的状态
4.事务的隔离性
隔离级别:4种
第一级别:读未提交(read uncommited)
对方事务还没有提交,我们可以读到对方未提交的数据。
存在的问题:读未提交存在脏读数据。现象叫脏读。
第二级别:读已提交(read commited)
解决的问题: 解决了脏读现象。
我方可以读取对方提交之后的数据。
存在的问题:不可重复读
第三级别:可重复读(repeated read)
解决的问题:解决了不可重复读问题。
存在的问题:读取到的数据是幻象。
第四级别:序列化/串行化
解决的问题:解决了所有问题。
缺点:效率低,需要事务排队。
(oracle)数据库默认隔离级别:读已提交
(mysql)数据库默认隔离级别:可重复读
5.
mysql数据库在默认状态下是自动提交的。
自动提交:执行一条DML语句,就提交一次。
关闭自动提交:start transaction(标志一个事务的开启)
6.
设置事务的全局隔离级别:
set global transaction isolation level read uncommited
查看事务的全局隔离级别:
select @@global.tx_isolation