Redis事务
默认状态未开启,执行步骤:
- multi 开启事务
- exec 执行事务
- discard 取消事务
特点:
- 单独的隔离操作,事务会按照顺序执行,不会被客户端的其它请求干扰
- 由于redis的事务只是把命令放到了队列里,并没有执行,而是等到最后一起执行,从而事务间就不会导致数据脏读、不可重复读、幻读的问题,所以也就没有隔离级别的概念
- 执行事务时,如果有语法错误,事务不会执行
- 不具备原子性,执行事务时,如果有命令执行失败,事务会继续执行,不会执行回滚操作,不会影响后续的操作
Mysql事务
默认开启事务,每次语句执行都会开启事务,执行步骤:
- begin 显示的开启事务
- commit 提交事务,执行语句
- rollback 取消事务,进行回滚操作,撤销所有更改
特点:
- 原子性,一个事务中的操作,要么全部完成,要么全部失败,只要执行中发生错误,就会被回滚到事务执行前的状态。
- 一致性,在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
- 隔离性,数据库允许多个并发事务同时对数据进行读写和修改,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致,事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
- 持久性,事务处理结束后,对数据的修改是永久的,即使系统故障也不会丢失