MYSQL面试--事务隔离级别+存储引擎区别(三)

-- 5.事务隔离级别
-- 资料:https://blog.csdn.net/ty497122758/article/details/60349595    --隔离事务代码
-- 可串行化(Serializable)
-- 可重复读(repeatable read)
-- 读已提交(read committed)
-- 读未提交(read uncommitted)

-- 例子:
SELECT @@tx_isolation -- 当前'会话'级别隔离别
SELECT @@global.tx_isolation -- 查看'系统'当前隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE -- 设置当前会话隔离级别--可串行化

	
-- 还未测试事务隔离对并发一致性问题的解决是否有效,因为不知道设置全局一致性和会话一致性区别


-- 6.存储引擎的区别
-- MyISAM
	-- 特性:
	-- 并发性和锁级别 (对于读写混合的操作不好,为表级锁,写入和读互斥)
	-- Myisam 表支持的索引类型(全文索引)
	-- Myisam 支持表压缩(压缩后,此表为只读,不可以写入。使用 myisampack 压缩)

	
	-- 应用场景:
	-- 没有事务
	-- 只读类应用(插入不频繁,查询非常频繁)
	-- 空间类应用(唯一支持空间函数的引擎)
	-- 做很多 count 的计算

-- InnoDB
	-- 特性:
	-- InnoDB支持行级锁
	-- 行级锁可以最大程度的支持并发
	-- 行级锁是由存储引擎层实现的
	-- InnoDB为事务性存储引擎
	-- 完全支持事物的 ACID 特性
	-- Redo log (实现事务的持久性) 和 Undo log(为了实现事务的原子性,存储未完成事务log,用于回滚)
	
	-- 应用场景:
	-- 可靠性要求比较高,或者要求事务
	-- 表更新和查询都相当的频繁,并且行锁定的机会比较大的情况
	
-- (面试)MyISAM和InnoDB引擎的区别?
	-- MyISAM 不支持外键,而 InnoDB 支持
	-- MyISAM 是非事务安全型的,而 InnoDB 是事务安全型的。
	-- MyISAM 锁的粒度是表级,而 InnoDB 支持行级锁定。
	-- MyISAM 支持全文类型索引,而 InnoDB 不支持全文索引。
	-- MyISAM 相对简单,所以在效率上要优于 InnoDB,小型应用可以考虑使用 MyISAM。
	-- MyISAM 表是保存成文件的形式,在跨平台的数据转移中使用 MyISAM 存储会省去不少的麻烦。
	-- InnoDB 表比 MyISAM 表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。
-- (面试)为什么不建议innodb使用亿级大表?
	-- 维护的不便利,alter修改都要上亿数据
	-- 计算 sum、count过于集中
	-- B+tree内存无法储存这么多索引,如果不中缓存要走很多磁盘io

猜你喜欢

转载自blog.csdn.net/qq_38056704/article/details/82807138