大佬教程收集整理的这篇文章主要介绍了MySQL 的ASID,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
InnoDB
支持事务,而 @H_584_12@myISam 不支持事务。这个是 mysql 将默认引擎改为 InnoDB
的主要原因。
InnoDB
支持外键,而 @H_584_12@myISaM 不支持外键
InnoDB
是聚簇索引,而 @H_584_12@myISam 是非聚簇索引
InnoDB
是行锁, @H_584_12@myISam是列锁,这也是把 myISAM 改成 InnoDB
的一个重要原因
@H_584_12@myISAM 是有三个文件
.frm
存储表的定义
.myd
存的是数据
.myi
存的是索引
InnoDB
有两个文件(没有专门保存数据的文件)
.frm
表的定义
.idb
数据和索引存储文件
正如下图,如果使用覆盖索引,直接就把数据拿出来了,而不需要再去主键索引里去查找了
指当一个事务正在访问数据,并且对数据进行了修改,而这种数据还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据还没有提交那么另外一个事务读取到的这个数据我们称之为脏数据。依据脏数据所做的操作肯能是不正确的。
不可重复读:指在一个事务内,多次读同一数据。在这个事务还没有执行结束,另外一个事务也访问该同一数据,那么在第一个事务中的两次读取数据之间,由于第二个事务的修改第一个事务两次读到的数据可能是不一样的,这样就发生了在一个事物内两次连续读到的数据是不一样的,这种情况被称为是不可重复读。
幻象读:一个事务先后读取一个范围的记录,但两次读取的纪录数不同,我们称之为幻象读(两次执行同一条 SELEct 语句会出现不同的结果,第二次读会增加一数据行,并没有说这两次执行是在同一个事务中)
其实仔细想想,就脏读和不可重复读两种情况,幻读只不过是读多行的不可重复读
事务 A
和事务 B
同时执行,事务 A
在整个执行过程中,把数据从 1 加到 10 ,而事务 B
可以看到事务 A
操作的中间值。所有他会脏读
示例:程序员拿着信用卡去享受生活(卡里当然是只有3.6万),当他埋单时(程序员事务开启),收费系统事先检测到他的卡里有3.6万,就在这个时候!!程序员的妻子要把钱全部转出充当家用,并提交。当收费系统准备扣款时,再检测卡里的金额,发现已经没钱了(第二次检测金额当然要等待妻子转出金额事务提交完)。程序员就会很郁闷,明明卡里是有钱的…
注意:
也就说,事务对数据进行 读
操作时,读操作事务要等待这个 写
操作事务提交后才能读取数据
事例:程序员拿着信用卡去享受生活(卡里当然是只有3.6万),当他埋单时(事务开启,不允许其他事务的updatE修改操作),收费系统事先检测到他的卡里有3.6万。这个时候他的妻子不能转出金额了。接下来收费系统就可以扣款了。
注意:
重复读可以解决不可重复读问题。写到这里,应该明白的一点就是,不可重复读对应的是修改,即update操作。但是可能还会有幻读问题。因为幻读问题对应的是插入INSERT操作,而不是update操作。
是最严格的事务隔离级别,它要求所有事务被串行执行,即事务只能一个接一个的进行处理,不能并发执行。
原子的保证,其实就是依赖于 rollBACk
回滚机制,在sql语句执行的时候,就会记录 undo log
日志,当执行发生回滚的时候,mysql就会执行与 undo log
相反的操作,比如你之前执行了一个 create 操作,那么他就会执行一个 delete 操作,如果你执行了一个 updata 操作,那么mysql就执行一个相反的 updata 操作。
背景: 因为数据的写是写在磁盘中的,所以每次的 IO
操作都很费时间,所以 mysql 建立了一个缓存 buffer
,每次把要提交的数据写到缓存的 buffer
中,然后把buffer中的数据,一次性的写入到数据库中,问题就在于这个了。如果数据我写入到 buffer 中,但是 buffer 中的数据还没有写入磁片。此时数据库宕机了。
解决这个问题,就是在将数据写入 buffer
的时候,同时将操作写入 redo log
中,因为redog是使用文件的追加模式的,所以他比将buffer写入磁盘要快很多很多。
写
- 写
:操作,通过锁来实现的读
- 写
:操作,通过 @H_584_12@mVCC机制实现的如果是 写-写
操作的话,可以使用锁
,来实现,锁呢分为表锁,行锁,还有间隙锁。其具体的区别在另一篇博客中可见https://www wangt.cc blogs wangt.cc /rush-peng/p/14992892.html
其实一致性是最终要追求的目标,就是通过上面的三种性质,来保证最终的数据库的一致性,比如主键唯一,数据要合法,在合理的范围内,等等。
@H_584_12@mvcc 全称 @H_584_12@multi-Version Concurrency Control ,即多版本并发控制。
同一行的数据,在执行读写操作的时候,会上 阻塞锁
,但是 @H_584_12@mVCC 在读写的时候,不用加锁
https://www wangt.cc blogs wangt.cc /myseries/p/10748912.html https://www.jianshu wangt.cc /p/fc8a654f2205 乐观所和悲观锁
以上是大佬教程为你收集整理的MySQL 的ASID全部内容,希望文章能够帮你解决MySQL 的ASID所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。