事务的特点

事务:也称工作单元,是由一个或多个SQL语句所组成的操作序列,这些SQL语句作为一个完整的工作单元,要么全部执行成功,要么全部执行失败。在数据库中,通过事务来保证数据的一致性。

一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成,事务只和DML语句有关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同。

事务处理语言:Transaction Process Language ,简称TPL,主要用来对组成事务的DML语句的操作结果进行确认或取消。确认也就是使DML操作生效,使用提交(COMMIT)命令实现;取消也就是使DML操作失效,使用回滚(ROLLBACK)命令实现。

事务特征:即ACID

–原子性(Atomicity)

事务就像“原子”一样,不可被分割,组成事务的DML操作语句要么全成功,要么全失败,不可能出现部分成功部分失败的情况。

一致性(Consistency)

一旦事务完成,不管是成功的,还是失败的,整个系统处于数据一致的状态。

隔离性(Isolation)

一个事务的执行不会被另一个事务所干扰。比如两个人同时从一个账户从取钱,通过事务的隔离性确保账户余额的正确性。

隔离性的四种

READ UNCOMMITTED:可以读取未提交的数据,未提交的数据称为脏数据,所以又称脏读。此时:幻读,不可重复读和脏读均允许;
READ COMMITTED:只能读取已经提交的数据;此时:允许幻读和不可重复读,但不允许脏读,所以RC隔离级别要求解决脏读;
REPEATABLE READ:同一个事务中多次执行同一个select,读取到的数据没有发生改变;此时:允许幻读,但不允许不可重复读和脏读,所以RR隔离级别要求解决不可重复读;
SERIALIZABLE: 幻读,不可重复读和脏读都不允许,所以serializable要求解决幻读;

持久性(Durability)

也称为永久性,指事务一旦提交,对数据的改变就是永久的,不可以再被回滚。

MySQL的事务处理主要有两种方法
1.用begin,rollback,commit来实现
    begin开始一个事务
    rollback事务回滚
    commit 事务提交
2.直接用set来改变MySQL的自动提交模式
    MySQL默认是自动提交的,也就是你提交一个sql,就直接执行!可以通过
    set autocommit = 0 禁止自动提交
    set autocommit = 1 开启自动提交
    来实现事务的处理

但要注意当用set autocommit = 0 的时候,以后所有的sql都将作为事务处理,直到用commit确认或 rollback结束,注意当结束这个事务的同时也开启了新的事务!按第一种方法只将当前的做为一个事务。

 

上一篇:MySql DML数据操纵语言


下一篇:mysql – 如何截断外键约束表?