数据库

1.MySQL

是一种关系型数据库,MySQL是开源免费的,MySQL默认端口号是3306。

2.存储引擎,一些常用的命令,查看MySQL的所有存储引擎

mysql> show engines;

3.MyISAM和InnoDB区别

MyISAM是MySQL(5.5版本之前)的默认数据库引擎,提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISM不支持事务和行锁,最大的缺陷是崩溃以后无法安全恢复。

MySQL5.5版本之后,默认存储引擎是InnoDB.

  1. 是否支持行级锁:MyISAM只有表级锁,而InnoDB支持行级锁。
  2. 是否支持事务和崩溃后的安全恢复:MyISAM强调的是性能,每次查询具有原子性,但是不提供事务支持。但是InnoDB提供支持事务,外部键等高级事务功能。
  3. 是否支持外键:MyISAM不支持,而InnoDB支持。

是否支持MVCC:仅InnoDB支持,应对高级兵发事务,MVCC更加有效。

4.索引

MySQL索引使用的数据结构主要是B树和哈希索引。对于哈希索引来说,底层的数据结构就是哈希表,在查询单挑记录的时候选择哈希索引查询性能最快,其余情况选择B树索引。MySQL使用的是B+树。

MyISAM:B+树叶子结点的data域存放的是数据记录的地址,如果指定的key存在,则读取出data域的值,然后以data域的值为地址读取相应的数据记录,“非聚簇索引”。

InnoDB:数据文件本身就是索引文件,叶子节点保存了完整的数据结构。

5.事务

事务是逻辑上的一组操作,要么都执行要么都不执行。

6.事务的四大特性(ACID)

(1)原子性:事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部做完,要么完全不起作用。

(2)一致性:执行事务前后,数据保持一致,多个事务对同一数据读取的结果是相同的。

(3)隔离性:并发访问数据库的时候,一个用户的事务不能被其他事务干扰。

(4)持久性:一个事务提交以后,它对数据库中的数据的改变是持久的。

并发事务会带来哪些问题?

多个事务并发运行,操作相同的事务会带来一些问题(1)脏读:一个事务访问数据库并且对数据进行了修改,而这种修改还没有提交到数据库中,另外一个事务也访问了数据,造成了脏读。(2)重复丢弃:一个事务读取一个数据对它进行修改时,另外一个事务也访问该数据也对它进行修改,这样第一个是事务内的修改结果就会丢失。(3)不可重复读:一个事务读两次数据之间,由于第二个事务对数据进行修改,导致第一个事务两次读到的数据不一致。(4)幻读:与不可重复读类似,一个事务读取了几行数据,接着另一个事务插入了几行数据,在第一个事务查询的时候,多了好几行原本不存在的数据好像是出现了幻觉一样。

7.不可重复读和幻读的区别?

不可重复读的重点是修改一行记录的某些列的值被修改,幻读是新增或者删除,读取一条记录,发现记录增多或者减少了。

8.事务的隔离级别:

(1)读取未提交:允许读取尚未提交的数据变更,最低的隔离级别。可能出现脏读、幻读、不可重复读。

(2)读取已提交:可以读取已经提交的数据变更,可以防止脏读、幻读,不可重复读还会发生。

(3)可重复读:对同一字段多次读取结果都是一致的,除非事务本身对数据进行了修改。

(4)可串行化:最高的隔离级别,所有的事务依次逐个进行,所有事务之间互相不干扰。该级别可以防止脏读、不可重复读和幻读。

Mysql的默认存储引擎innodb,的隔离级别是可重复读。

9.锁机制和InnoDB锁算法

MyISAM:采用行级锁。

InnoDB:采用表级锁和行级锁,默认是行级锁。

10.表级锁和行级锁对比

表级锁:实现力度最大的一个锁,对整张表加锁,实现简单资源消耗比较少。加锁快不会出现死锁。

行级锁:操作力度最小的一个锁,只对当前行进行操作。加锁开销大,会出现死锁,而且慢。

InnoDB存储引擎锁的算法有三种:

Record lock:单个行上的锁;

Gap lock:间隙锁,锁定一个范围,不包括记录本身。

Next key lock:record+gap:锁定一个范围,包括记录本身。

11.大表优化:

(1)读写分离:主库负责写,从库负责读。

(2)垂直分区:数据库表列的拆分,把一张列比较多的表拆分成多个表。优点:可以使数据变小,查询时减少I/O次数,简化表的结构易于维护。缺点:主键出现冗余,在应用层进行join来解决。

(3)水平拆分:数据表行的拆分。

12.数据库分片的两种常见方案:

(1)客户端代理:分片逻辑在应用端,封装在jar包中,通过修改或封装JDBC来实现。

(2)中间件代理:在应用和数据层之间加一个代理,分片逻辑统一维护在中间件代理。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值