码迷,mamicode.com
首页 > 数据库 > 详细

高性能MySQL_第一章-MySQL架构和历史

时间:2017-03-22 00:07:33      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:price   持久性   city   失败   情况   死锁   串行   ant   架构   

事务:一组原子性的SQL查询。如果数据库能够成功的对数据库应用该组查询的全部语句,那么就执行改组查询;否则所有的语句都不会执行。

ACID:原子性(atomocity),一致性(consistency),隔离性(isolation),持久性(durability)。

原子性:一个事务必须被视为不可分割的最小执行单元。整个事物的操作要么全部提交成功,要么全部失败回滚,不可能存在只执行了一部分的操作。

一致性:数据库总是从一个一致性的状态转移到另一个一致性的状态。即使中间出现问题,因为事务没有提交,事务造成的修改也不会保存到数据库中。

隔离性:一个事务所做的修改在最终提交以前,对其他事务是不可见的。例如从一个账户向另一个账户转账,从其他事务角度来看是一瞬间的操作,不会出现短暂的金额总数不匹配的问题。

持久性:一旦事务提交,其所做的修改就会被永久的保存在数据库中。

四种隔离级别:

READ UNCOMMITTED:未提交读

事务中的修改,即使未被提交,对其他事务也是可见的。

脏读:事务可以读取未提交的数据。

 

READ COMMITTED: 提交读

大部分数据库系统的默认隔离级别(MySQL不是),一个事务开始时,只能“看见”已经提交的事务所作的修改。也可叫做不可重复读(nonrepeatable read) ,因为执行同样的查询,两次得到的数据可能不同。

 

REPEATABLE READ:可重复读

MySQL默认隔离级别。解决了脏读的问题,同时保证了在同一事务中多次读取同样的记录结果相同。然而可能会导致幻读(Phantom Read),某一个事务在读取某一个范围的记录时,另一个事务又在该范围内插入新的记录,当之前的事务再次读取该范围的记录时,就会产生幻行。

 

SERIALIZABLE: 可串行化

最高的隔离级别。强制事务串行执行,避免了幻读情况的发生。相当于在每一行数据上都加锁,会导致大量的超时和锁争用的问题,现实开发中很少使用该隔离级别。

 

死锁:两个或多个事务在同一资源上相互争夺对方占用,并请求锁定对方的资源,从而导致恶性循环的现象。

举例:

事务1:

start transaction;

update StockPrice set ... where id = 3;

update StockPrice set ... where id = 4;

commit;

 

事务2:

start transaction;

update StockPrice set ... where id = 4;

update StockPrice set ... where id = 3;

commit;

 

解决死锁:死锁检测,死锁超时机制。

高性能MySQL_第一章-MySQL架构和历史

标签:price   持久性   city   失败   情况   死锁   串行   ant   架构   

原文地址:http://www.cnblogs.com/PaulingZhou/p/6597363.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!