Java面试 MYSQL(事务,存储引擎)

事务简介:

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,这些操作要么同时成功,要么同时失败。

事务操作:

查看/设置事务提交方式

SELECT @@autocommit;
SET @@autocommit=0;
提交事务:
COMMIT;
回滚事务:
ROLLBACK;

事务四大特性(ACID):

原子性:事务是不可分割的最小单元,要么全部成功,要么全部失败

一致性:事务完成时,必须使所有的数据都保持一致状态。

隔离性:数据库系统提供的隔离机制,保证事务再不受外部并发操作影响的独立环境下运行。

持久性:事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

并发事务问题:

脏读:一个事务读到另外一个事务还没有提交的数据。

不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称为不可重复读。

幻读:一个事物按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已将存在,好像出现了“幻影”。

事务隔离级别:

隔离级别 脏读 不可重复读 幻读
Read uncommitted(读未提交)
Read committed (读已提交) ×
Repeatable Read(默认 可重复读) × ×
Serializable (串行化) × × ×

--查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
--设置事务隔离级别
SET [SESSION|GLOBAL] TRANSACTION LEVEL {READ UNCOMMITTED |READ COMMITTED |REPEATABLE READ|SERIALIZABLE}

存储引擎简介:

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。

存储引擎特点:

注意:这个面试官经常会问你知道哪几种存储引擎,他们有什么区别,本人真的被问到过

InnoDB

介绍:

InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MYSQL5.5之后,InnoDB是默认的MYSQL存储引擎。

特点:

DML操作遵循ACID模型,支持事务;

行级锁2,提高并发访问性能;

支持外键FOREIGN KEY约束,保证数据的完整性和正确性;

MyISAM

介绍:

MyISAM是MySQL早期的默认存储引擎。

特点:

不支持事务,不支持外键

支持表锁,不支持行锁(锁这个模块会在后面详细介绍)

访问速度快

Memory

介绍:

Memory引擎的表数据是存储在内存中的,由于收到硬件问题、或断电问题的影响,只能将这些表作为临时表或缓存使用。

特点:

内存存放

hash索引(默认)

文件

xxx.sdi:存储表结构信息

存储引擎选择:

InnoDB:是Mysql的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新和删除操作,那么InnoDB存储引擎是比较合适的选择。

MyISAM:如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。

MEMORY:将所有数据保存在内存中,访问速度快,通常用于临时表级缓存。缺点就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。

(注:本文会持续汇集多方面资料,持续更新)

你可能感兴趣的:(java,面试,mysql)