MySQL事务

来源:互联网 发布:安装ubuntu分区不可用 编辑:程序博客网 时间:2024/06/05 04:51

一.什么是事务

事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。 

事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作。 

事务的特性

原子性:组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分 

一致性:在事务处理执行之前和之后,数据是一致的

隔离性:一个事务处理对另一个事务处理没有影响

持续性:当事务处理成功执行到结束的时候,其效果在数据库中被永久纪录下来

三.事务条件

数据库引擎为InnoDB

四.事务使用

1.直接把set autocommit = off   关闭自动提交(默认是开启的) 这样每条SQL语句都需要commit,不然是不会产生永久效果

2.使用begin,commit,rollback,来启动,提交,回滚一个事务;

推荐使用2   eg:

begin;SQL Sentence1;savepoint s1;SQL Sentence2;savepoint s2;SQL Sentence3;savepoint s3//commit;// rollback to savpoint s1  (回到SQL Sentence1;后的状态,想要产生永久效果,在回滚到具体一个点后,仍需要commit)  || rollback 就是直接回滚到最开始的状态

五.事务的隔离级别

1.Read Uncommitted-------出现脏读,不可重复读和幻读

2.Read Committed----------出现不可重复读和幻读

3.Repeatable Read---------出现幻读(MySQL默认隔离级别)

4.Serializable-----------------影响MySQL效率,变成单线程的访问机制

脏读读取到未提交的数据。

不可重复读:同一个事务里面的相同查询不一致(读取的行数据,可以更改

幻读:同一个事务里面的相同的查询结果集[主要指是针对一个范围的查询,eg:查询行数]不一致读取的行数据,不可以更改,但可以插入新的数据

1.查看当前会话隔离级别

select @@tx_isolation;

2.查看系统当前隔离级别

select @@global.tx_isolation;

3.设置当前会话隔离级别

set session transaction isolatin = 'repeatable read';

4.设置系统当前隔离级别

set global transaction isolation = 'repeatable read';

参考链接:http://www.iteye.com/topic/322382


隔离并不改变锁本身的行为,而是通过实行不同的锁机制实现的。比如是否加锁,加多长时间的锁,加什么类型的锁等。同时,也会影响排它情况下的可见性

MyISAM 里面没有实物,但同样可以通过加锁的方式,实现事务,事务的隔离






0 0
原创粉丝点击