Java面试——mysql数据库相关

Java面试——mysql数据库相关

1,数据库隔离级别:
隔离级别隔离级别的值导致的问题
Read-Uncommited导致脏读
Read-Commited1避免脏读,允许不可重复读和幻读
Repeatable-Read2避免脏读、不可重复读,允许幻读
Serializable3串行化读,事务只能一个一个执行,避免了脏读、不可重复读、幻读,执行效率慢,慎重使用
2,如果不考虑事务隔离性引发的安全性问题:
  • 脏读:一个事务读到了另一个事务未提交的数据。

  • 不可重复度:一个事务读到了另一个事务已经提交的update的数据导致多次查询结果不一致。

  • 幻读:一个事务读到了另一个事务已经提交的insert数据导致多次查询结果不一致。

3,MySql数据库存储引擎?

1,InnoDB存储引擎
a,InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),其它存储引擎都是非事务安全表,
支持行锁定和外键,MySQL5.5以后默认使用InnoDB存储引擎。
b,为MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。
c,MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。
2,MyISAM存储引擎
MyISAM基于ISAM存储引擎,并对其进行扩展,它是在web、数据仓库和其他应用环境下最常用的存储引擎之一。
MyISAM拥有较高的插入、查询速度,但不支持事务,不支持外键。
MyISAM的主要特性:
被大文件系统和操作系统支持。
当把删除和更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。
每个MyISAM表最大索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16。
最大的键长度是1000字节,这也可以通过编译来改变,对于键长度超过250字节的情况,一个超过1024字节的键将被用上。
BLOB和TEXT列可以被索引。
3,MEMORY存储引擎
MEMORY存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问。
MEMORY主要特性:
MEMORY表的每个表可以有多达32个索引,每个索引16列,以及500字节的最大键长度。
可以在一个MEMORY表中有非唯一键值。

4,数据库中常见的锁:
  • 行级锁:行级锁是MySql中粒度最细的一种锁,表示只对当前操作的行进行加锁。
    其加锁粒度最小,但加锁的开销也最大。行级锁分为共享锁 和 排他锁。

​ 特点:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

  • 表级锁:表级锁是MySql数据库中粒度最大的一种锁,表示对当前操作的整张表加锁,实现简单,资源消耗最少,被大部分MySql引擎支持。表级锁定分为表共享读锁(共享锁)与表独占写锁(排他锁)。
    特点:开销小,加锁快,不会出现死锁,锁定粒度大,发出锁冲突的概率最高,并发度最低。
  • 页级锁:页级锁是介于行级锁和表级锁之间的一种锁,表级锁速度快、但冲突多,行级锁速度慢、但冲突少。所以取了折衷的页级,一次锁定相邻的一组记录。BDB 支持页级锁
5,MySQL 常用存储引擎的锁机制
  • MyISAM 和 MEMORY 采用表级锁(table-level locking)
  • BDB 采用页面锁(page-level locking)或表级锁,默认为页面锁
  • InnoDB 支持行级锁(row-level locking)和表级锁, 默认为行级锁
6,如何防止死锁

有多种方法可以避免死锁,这里只介绍常见的三种
1、如果不同程序会并发存取多个表,尽量约定以相同的顺序访问表,可以大大降低死锁机会。
2、在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率;
3、对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值