事务就是一组数据库操作序列(包含一个或者多个SQL操作命令),事务会把所有操作看作是一个不可分割的整体向数据库系统提交或撤销操作,所有操作要么都执行,要么都不执行。
原子性、一致性、隔离性、持久性
事务管理的基础。把事务中的所有操作看作是一个补课分割的工作单元,要么都执行,要么都不执行。
事务管理的目的。保证事务开始前和事务结束后数据的完整和一致。
事务管理的手段。使多个事务并发操作同一个表数据时,每个事务都有各自独立的数据空间,事务的执行不会受到其他事务的干扰。可通过设置隔离级别解决不同的一致性问题。
事务管理的结果。当事务被提交以后,事务中的命令操作修改的结果会被持久保存,且不会被回滚
(1)脏读:一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚的。
(2)不可重复读:一个事务内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交而引起的。
(3)幻读:一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,另一个事务也修改这个表中的数据, 这种修改是向表中插入一行新数据。那么,操作前一个事务的用户会发现表中还有没有修改的数据行,就好象发生了幻觉一样。
(4)丢失更新:两个事务同时读取同一条记录,A先修改记录,B也修改记录(B不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果。
未提交读(read uncommitted):允许脏读,不可重复读,幻读
提交读(read committed):不允许脏读,允许不可重复读,幻读
可重复读(repeatable read):不允许脏读,不可重复读,有条件的允许幻读(InnoDB存储引擎可以不允许)
串行读(serializable):都不允许,相当于表级锁定,但是会影响数据库的读写效率和性能
mysql默认的事务处理级别是 repeatable read ,而Oracle和SQL Server是 read committed
set global transaction isolation level 隔离级别 ;
set session transaction isolation level 隔离级别;
全局级:对所有会话有效
会话级:只对当前的会话有效
show global variables like '%isolaion';
show session variables like '%isolation%';
事务管理中,原子性是基础,隔离性是手段,一致性是目的,持久性是结果
begin;
……? ? ?
create
database/table
insert into
uodate
XXX set
delete from
savepoint XX(XX代表回滚点名称)
rollback to XX
commit;或 rollback;
set [global/session] autocommit = 0/1;? ? ? ? ? ? ? ? ? ? ? #0关闭自动提交,1开启自动提交
show [global/session] variables like 'autocommit';? ? ? ? ?#查看Mysql中的autocommit值