MySQL数据库篇

一、MySQL有哪几种数据存储引擎?有什么区别?

MySQL中通过show ENGINES指令可以看到所有支持的数据库存储引擎。 最为常用的就是MyISAM 和InnoDB 两种。

MyISAM和InnDB的区别:

1、存储文件。

MyISAM每个表有两个文件。

MYD和MYISAM文件。 MYD是数据文件。 MYI是索引文件。

InnDB每个表只有一个文件,idb。

2、InnoDB支持事务,支持行级锁,支持外键。

3、InnoDB支持XA事务

4、InnoDB支持savePoints

二、什么是脏读、幻读、不可重复读?要怎么处理才能解决这个问题?

这些问题都是MySQL进行事务并发控制时经常遇到的问题。

脏读: 在事务进行过程中,读到了其他事务未提交的数据。

幻读: 在一个事务过程中,用同样的操作查询数据,得到的记录数不相同。

不可重复读: 在一个事务过程中,多次查询的结果不一致。

处理的方式有很多种:加锁、事务隔离、MVCC

加锁:

1、脏读:在修改时加排他锁,直到事务提交才释放。读取时加共享锁,读完释放锁。

2、幻读: 加范围锁。

3、不可重复读: 读数据时加共享锁,写数据时加排他锁。

三、事务的基本特性和隔离级别有哪些?

事务: 表示多个数据操作组成一个完整的事务单元,这个事务内的所有数据操作要么同时成功,要么同时失败。

事务的特性:ACID

1、原子性:事务是不可分割的,要么完全成功,要么完全失败。

2、一致性:事务无论是完成还是失败,都必须保持事务内操作的一致性。当失败时,都要对前面的操作进行回滚,不管中途是否成功。

3、隔离性:当多个事务操作一个数据的时候,为防止数据损坏,需要将每个事务进行隔离,互相不干扰。

4、持久性: 事务开始就不会终止。他的结果不受其他外在因素的影响。

事务的隔离级别:SHOW VARIABLES like 'transaction%'

设置隔离级别: set transaction level xxx 设置下次事务的隔离级别。

set session transaction level xxx 设置当前会话的事务隔离级别

set global transaction level xxx 设置全局事务隔离级别

MySQL当中有五种隔离级别

NONE : 不使用事务。

READ UNCOMMITED: 允许脏读

READ COMMITED: 防止脏读,最常用的隔离级别

REPEATABLE READ:防止脏读和不可重复读。MYSQL默认

SERIALIZABLE: 事务串行,可以防止脏读、幻读,不可重复度。

五种隔离级别,级别越高,事务的安全性是更高的,但是,事务的并性能也就会越低。

四、MySQL的锁有哪些?什么是间隙锁?

从锁的粒度来区分

1、行锁:加锁粒度小,但是加锁资源开销比较大。 InnoDB支持。

共享锁: 读锁。多个事务可以对同一个数据共享同一把锁。持有锁的事务都可以访问数据,但是只能读不能修改。select xxx LOCK IN SHARE MODE。

排他锁: 写锁。只有一个事务能够获得排他锁,其他事务都不能获取该行的锁。InnoDB会对update\delete\insert语句自动添加排他锁。SELECT xxx FOR UPDATE。

自增锁: 通常是针对MySQL当中的自增字段。如果有事务回滚这种情况,数据会回滚,但是自增序列不会回滚。

2、表锁:加锁粒度大,加锁资源开销比较小。MyISAM和InnoDB都支持。

表共享读锁

表排他写锁

意向锁:是InnoDB自动添加的一种锁,不需要用户干预。

3、全局锁: Flush tables with read lock 。 加锁之后整个数据库实例都处于只读状态。所有的数据变更操作都会被挂起。一般用于全库备份的时候。

常见的锁算法: user: userid ( 1,4,9) update user set xxx where userid=5; REPEATABLE READ 间隙锁锁住(5,9)

1、记录锁:锁一条具体的数据。

2、间隙锁:RR隔离级别下,会加间隙锁。锁一定的范围,而不锁具体的记录。是为了防止产生幻读。(-xx,1)(1,4)(4,9)(9,xxx)

3、Next-key : 间隙锁+右记录锁。(-xx,1](1,4](4,9](9,xxx)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JackXiang2019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值