事务的创建
隐式事务:事务没有明显的开启和结束的标记<br>比如insert、update、delete语句<br>
显示事务:事务具有明显的开启和结束的标记
定义
一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行
特性
原子性:一个事务不可再分割,要么都执行要么都不执行
一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态
隔离性:一个事务的执行不受其他事务的干扰<br>
持久性:一个事务一旦提交,则会永久的改变数据库的数<br>
使用步骤
开启事务
SET autocommit=0;<br>START TRANSACTION;
编写一组事务的语句
UPDATE account SET balance =1000 WHERE username='张无忌';
结束事务
ROLLBACK;-- 回滚
COMMIT;-- 提交
隔离级别
read uncommited<br>
read commited
oracle中默认第二个隔离级别:read commited
repeatable read
mysql中默认 第三个隔离级别:repeatable read<br>
serializable
查看隔离级别
select @@tx_isolation;
设置隔离级别
set session|global transaction isolation level 隔离级别<br>
delete和truncate在事务使用时的区别<br>
delete在使用事务时删除数据时进行回滚操作,会成功的进行回滚<br>
truncate在使用事务时删除数据进行回滚操作,会成功的将表中的数据进行删除<br>
事务并发的所产生的问题:
脏读:对于两个事务T1,T2,T1读取了已经被T2更新但还没有提交的字段之后,若T2回滚,T1读取的内容就是临时且无效的。<br>
不可重复读:对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段之后,T1再次读取同一个字段,值就不同了。
幻读:对于两个事务T1,T2,T1从一个表中读取一个字段,然后T2在该表中插入了一些新的行之后,如果T1再次读取同一个表,就会多出几行。
针对事务并发所产生的问题因此设置了四种隔离级别来拦截这些问题:<br>
read uncommited(读未提交的数据)
read commited(读已提交的数据)
repeatable read(可重复读)<br>
子主题