高性能 mysql架构与历史

事务内容:

事务要遵循ACID


事务SQL样本

start transaction;

select valance from checking where customer_id=10233276;

update checking set balance=balance-200.0 where customer_id=10233276;

update savings set balance=balance+200.0 where customer_id=10233276;

commit;


参考网址:http://blog.csdn.net/sunandice/article/details/7697278

SQL的四种隔离级别:

read uncommited(未提交读):事务在修改中,即使没有提交,其他事务也可以读出这些‘脏’数据

read commited(提交读):一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的。

repeatable read(可重复读):是MySQL的默认事务隔离级别,解决了脏读的问题,即在同一事务中多次读取同样记录的结果一致,期间的另外事务的修改是不能看到的,会出现幻读。

serializable(可串行化):最高的隔离级别,强制事务串行执行,避免了幻读的可能性。它会在读取的每一行数据上都加锁,所以可能导致大量的超时和锁争用的问题。


死锁出现后,只有部分或者完全回滚其中一个事务,才能打破死锁,innoDb目前处理死锁的方式是,将持有最少行级排它锁的事务进行回滚。


事务日志:使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把修改行为记录到持久在硬盘上的事务日志中,这样,内存中被修改的数据在后台可以慢慢地刷回到磁盘。


MySQL提供的两种事务型的存储引擎InnoDB和NDB Cluster还有XtraDB和PBXT。他们采用自动提交,每个不是显示地开始一个事务,每个查询都被当做一个事务执行提交操作。可以通过 show variables like 'autocommit';查看   使用set autocommit=1启用自动提交

当autocommit=0时,所有的查询都是在一个事务中,修改autocommit对MyISAM或者内存表,不会有任何影响,因为它们没有commit或者rollback的概念

mysql还可以通过执行set transaction isolation level来舍子隔离级别


多版本并发控制(MVCC)使大多数读操作都可以不用加锁,不是简单的加行级锁,InnoDB的MVCC通过在每行记录后面保存两个隐藏的列来实现,一个是保存了行的创建时间,一个是保存行的过期时间,这些时间用系统版本号代替,没开始一个事务,系统版本号都会自动递增


.frm保存创建表的定义,他的名字与表名相同

可以通过show table status like 'user'\G来显示表的相关信息,其中collation为表的默认字符集和字符列排列规则,checksum保存整个表的实时效验和


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值