RedisMySQLRedis和MySQL对于事务的不同支持

Posted The Gao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RedisMySQLRedis和MySQL对于事务的不同支持相关的知识,希望对你有一定的参考价值。

事务

事务可以理解为一组指令的合集。

mysql

MySQL与硬盘进行数据交换,它对于事务的支持具有四大特性,也就是我们常说的ACID特性,即原子性、一致性、隔离性和持久性。

对于一个事务,如果其中的某条指令发生错误,则整个事务都不会成功,会回滚。

举耳熟能详的银行转账问题的例子来说,张三转给李四100块钱是一个事务,这个事务包含两个操作,一个是张三转出100元,一个是李四接收100元。对于MySQL来说,如果这两个操作任何一个出现问题,则整个事务都会回滚,也就是说张三和李四卡中的金额还是之前的金额。

Redis

Redis存在于内存中,它是一种NoSQL型数据库。它对于事务的支持并没有以上的特性,它具有一次性、顺序性、排他性的特性。

对于一个事务,如果其中的某条指令发生编译错误,则整个事务都不会执行。这个很好理解,编译没有通过,相当于你面对老外不会说英语一样,先回炉重造吧,把语法修正。如果其中的某条指令发生运行错误,则事务照常进行,只不过运行错误的语句不会产生结果。

multi
set k1 v1
incr k1
set k2 v2
exec

对于这个事务来说,第二行设置的是String的数据类型,String数据类型是无法incr的,因此第三行会抛出异常,但是第四行语句会照常进行。在事务执行完毕,get k2是可以取到v2的。

讲到这里,大家可以明白Redis和MySQL对于事务的不同支持了吧。

以上是关于RedisMySQLRedis和MySQL对于事务的不同支持的主要内容,如果未能解决你的问题,请参考以下文章

RedisMySQLRedis和MySQL对于事务的不同支持

MySQL的SQL语句 -事务性语句和锁定语句- XA 事务状态

十:MYSQL中的事务

RDB | MySQL的事务隔离级别和锁的机制

MySQL的RR和RC事务隔离级别加锁类型验证

mysql悲观锁中的共享锁和排他锁