mysql -b -w_mysql高级

一、Innodb和myisam区别

Innodb

Myisam

支持事务

支持

不支持

锁单位

行级锁

表级锁

全文索引

不支持

支持

支持外键

支持

不支持

二、事务特性

1、原子性:要么全成功,要么全失败,其中一个错误那就回滚

2、一致性:保证原子性,保证最后数据没有异常

3、隔离性:事务在未提交之前,事物之间是互相隔离的

4、持久性:执行完之后数据会永久保存

三、事务隔离特性,默认是可重复读

脏读:事务A读了事务B数据,事务B回滚,A读的数据称为脏数据

幻读:事务A更改了所有数据,此时事务B插入一条数据,A以为看错了,产生幻觉

不可重复读:事务B在多次读取一条数据,此时事务A更改了这条数据,导致事务B多次读取数据不一致

事务隔离级别

脏读

幻读

不可重复读

读未提交(read-uncommitted)

不可重复读(read-committed)

可重复读(repeatable-read)

串行化(serializable)

四、锁机制

1、按照锁的互斥达成度分为:

共享锁:读取数据时加S锁,之间不互斥

排他锁:修改数据时加X锁,与任何锁互斥

2、按照锁颗粒度分为:

表锁

意向锁:意向锁分为意向共享锁和意向排他锁

例如:

意向共享锁:select ... lock in share mode;

意向排他锁:select ... for update;

自增锁:自增值时,如果A,B事务同事插入,A先进入的话,必须等A执行完B才可以,否则B会被阻塞

例如:insert into tabel1 (id,value) values(2,1111)

行锁

间隙锁:它封锁索引记录中的间隔,阻止其他事务对该范围操作

例如:select * from table1 where id between 8 and 15 for update;

记录锁:命中索引,阻止其他事务对这行操作

例如:select id=1 from table1 for update;

插入意向锁:属于间隙锁的一种特殊情况,专门针对insert操作。指多个事务,在同一个索引,同一个范围区间插入记录时,如果插入的位置不冲突,不会阻塞彼此

例如:事务A:insert into table1(id,value) values(1,'v1')  事务B:insert into table2(id,value) values(2,'v2') ;2个事务互不排斥

临键锁:是记录锁与间隙锁的组合,它的封锁范围,既包含索引记录,又包含索引区间

例如:事务A执行,未提交:select * from table1 where id = 20 for update;事务B执行:insert into table1(value) values('vlock');会阻塞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值