Mysql事务和锁--INNODB

一、名词解析:

RDBMS::Rational Database Management System    即关系型数据库管理系统

MVCC:Multi-version Concurrency control  多版本并发控制协议

 

Mysql Innodb存储引擎用的就是--MVCC

MVCC最大的优点:读不加锁,读写不冲突    几乎所有的RDBMS都支持MVCC

 

二、MVCC

MVCC并发控制中,【读】分为两类:

1、【快照读】:读取的是记录的可见版本(也许是历史版本),不加锁;

操作:select

2、【当前读】:读取记录的最新版本,加锁,(保证其他事务不会并发修改这条记录)

操作:delete

    insert

    update

锁:S ----- 共享锁

X ----- 排它锁

******************************************************************************************************************************************************************

update/insert/delete操作在数据库中执行的流程:

用户发起一条update操作-------------》发送给mysql server------------》根据where条件找到第一条满足条件的记录

--------------》Innodb将第一条记录返回,并加锁【Current Read当前读】-------------------》mysql server收到这条加锁的记录之后,再发起一条请求,更新这条记录

如此往复,可见对于【当前读】的sql语句,mysql server是一条条进行的,逐条加锁,直到完成为止

******************************************************************************************************************************************************************

 

三、聚簇索引:Cluster Index

聚簇索引表:这是innodb存储引擎的数据组织方式

聚簇索引的顺序就是数据的物理存储顺序

【为什么索引查找数据较快?

SQL Server的最小空间分配单元是“页(Page)”,一个页在磁盘上占用8K空间,相比于存储数据来说,存储索引更省空间

比如:一个表有8000条数据,

一条数据占1000字节,那么磁盘上一页可以存8条数据,这些数据要存1000页,如果没有索引的话,要在1000个页面内中寻找要找的某一条数据;

在其中的一个10字节的字段上建索引,那么每条记录对应的索引块的大小为10字节,那么磁盘上一页可以存800条索引,只要存10页,那么要寻找某条数据的时候,只要寻找这10个页面即可找到结果,大大节省了I/O

-----------上述说法有待求证,暂不予采纳】

四、隔离级别

以下为引用:http://www.cnblogs.com/zhaoyl/p/4121010.html

 

MySQL/InnoDB定义的4种隔离级别:

  • Read Uncommited

    可以读取未提交记录。此隔离级别,不会使用,忽略。

  • Read Committed (RC)

    快照读忽略,本文不考虑。

    针对当前读,RC隔离级别保证对读取到的记录加锁 (记录锁),存在幻读现象。

  • Repeatable Read (RR)

    快照读忽略,本文不考虑。

    针对当前读,RR隔离级别保证对读取到的记录加锁 (记录锁),同时保证对读取的范围加锁,新的满足查询条件的记录不能够插入 (间隙锁),不存在幻读现象。

  • Serializable

    从MVCC并发控制退化为基于锁的并发控制。不区别快照读与当前读,所有的读操作均为当前读,读加读锁 (S锁),写加写锁 (X锁)。

    Serializable隔离级别下,读写冲突,因此并发度急剧下降,在MySQL/InnoDB下不建议使用。

详细见:http://www.cnblogs.com/zhaoyl/p/4121010.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值