事务程序员大数据 爬虫Python AI Sql

数据库事务

2017-01-22  本文已影响60人  小鱼嘻嘻

数据库事务的四大特点

上学的时候我们都学过事务的四大特点ACID,很多时候我们都不知道ACID到底是个什么东西?今天我们就来好好分析分析是什么叫做ACID。

看到一个很好的说明一致性的例子,银行两个账户总共1万块钱,不论他们之间发生多少次转账,总共的金额应该是1万块不变。

例如多个用户在操作数据库同一张表的时候,会产生多个事务,这些事务执行是串行化的。

如果没有事务的隔离性,会发生什么呢?

update account set money=money+100 where name=’B’;  (此时A通知B)
update account set money=money - 100 where name=’A’;

如果执行完一个update,此时b去查询的时候发现账户确实多了100,而后一个update执行失败,事务回滚,此时b的账户并没有多100块,就会造成脏读。

// 第一个事务第一查询
select * from t_user t where t.name like '%a%';
// 第二个事务执行了update,并且已经提交
update t_user set  name value =' amily';
// 第一个事务再次查询
select * from t_user t where t.name like '%a%';

这样两次查询的结果就是不一致的。
脏读和不可重复读的区别是什么呢?
脏读是一个事务读到另一个事务未提交的数据,不可重复读是指一个事务读到另一个已经提交了的事务。

// 第一个事务更新
update t_user set name=2 where name=1;
// 第二个事务insert
insert into t_user   (name) value  (1);
// 第一个事务查询
select * from t_user t where t.name =  1;

数据库事务的四大隔离级别

总结一下:

隔离级别 Dirty reads non-repeatable reads phantom reads
Serializable 不会 不会 不会
READ COMMITTED 不会
REPEATABLE READ 不会 不会
Read Uncommitted

性能来说的话是:
read-uncommitted>read-committed>reaptable-read>serializable
从隔离性来说:
read-uncommitted<read-committed<reaptable-read<serializable

参考来源

上一篇 下一篇

猜你喜欢

热点阅读